using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Domain.IoTHuaWeiEntity
{
    /// <summary>
    /// 智能家居设备发现请求的定义
    /// </summary>
    public class SmartHomeContentInfoReq
    {
        /// <summary>
        /// FULL
        /// </summary>
        public string dataType { get; set; }
        /// <summary>
        /// 请求体中的分页结构，携带分页查询条件。
        /// </summary>
        public PaginationReq pagination { get; set; }
        /// <summary>
        /// 时间格式，yyyyMMddHHmmss
        /// </summary>
        //public string timestamp { get; set; }
    }

    /// <summary>
    /// 请求体中的分页结构，携带分页查询条件。
    /// </summary>
    public class PaginationReq
    {
        /// <summary>
        /// 分页大小限制。最小0，默认1000
        /// </summary>
        public long limit { get; set; }
        /// <summary>
        /// 分页起始下标。不携带时表示从第一条开始查询，实际是整数类型。最大16
        /// </summary>
        public string start { get; set; }
    }

    /// <summary>
    /// 智能家居设备发现响应的定义 首行描述该文件保存的内容，包括：实体类型、设备类型、语言种类； 
    /// 排在前面的热词记录表示热度越高，需要系统优先识别它们的语音语义；
    /// 排在后面的热词记录，在达到系统规格上限时会被优先老化掉。 
    /// 热词数量一般建议不超过标准词+别名的数量总共不超过1万个词。 
    /// 数量超规格的词系统会认为非热词，人工会定期审视这些词，确定是否定期纳入系统版本的全量实体词库。
    /// </summary>
    public class SmartHomeContentInfoRsp
    {
        /// <summary>
        /// 元数据内容记录数
        /// </summary>
        public List<SmartHomeContentInfoItem> data { get; set; }
        /// <summary>
        /// 本次请求的响应分页信息（总计多少条记录，下一次请求从哪一条开始）。响应体中的分页结构，携带后续查询的分页信息。
        /// </summary>
        public PaginationRsp pagination { get; set; }
        /// <summary>
        /// 被调用方期望下一次调用携带的时间戳。时间格式，yyyyMMddHHmmss
        /// </summary>
        public string expectedNextTimestamp { get; set; }
        /// <summary>
        /// 返回状态
        /// </summary>
        public string errorCode { get; set; }
        /// <summary>
        /// 描述
        /// </summary>
        public string errorMessage { get; set; }
    }

    /// <summary>
    /// 智能家居设备发现数据的响应内容定义
    /// </summary>
    public class SmartHomeContentInfoItem
    {
        /// <summary>
        /// 国家码，如CN，缺省为空，表示不区分国家
        /// </summary>
        public string countryCode { get; set; }
        /// <summary>
        /// 设备类型,缺省为空，表示不区分设备类型，当前只支持大屏设备类型 3-大屏(电视)多个设备类型用逗号分割
        /// </summary>
        public string deviceType { get; set; }
        /// <summary>
        /// 语言种类，如zh-CN，缺省为空，表示不区分语言
        /// </summary>
        public string language { get; set; }
        /// <summary>
        /// 华为侧语音助手提供的VirtualTerminal虚终端，请联系华为侧语音助手接口人
        /// </summary>
        public string vtId { get; set; }
        /// <summary>
        /// 智能家居设备数据的实际内容
        /// </summary>
        public List<SmartHomePayloadObjDef> payload { get; set; }
        /// <summary>
        /// 开发者支持的自定义场景列表，如回家场景，睡眠场景
        /// </summary>
        public List<SmartHomeSceneRuleObjDef> sceneRuleList { get; set; }
    }

    /// <summary>
    /// 开发者需要华为侧语音助手识别的场景名定义，华为侧在命中用户的语音意图后会放在调用开发者的接口的意图字段中传递给开发者
    /// </summary>
    public class SmartHomeSceneRuleObjDef
    {
        /// <summary>
        /// 该词的标准名称，所有的标准名称、别名需要保证唯一； 
        /// 如果无法保证唯一性，则系统会做如下容错处理： 
        /// 1、别名与标准词冲突了，去掉别名； 
        /// 2、标准词之间冲突了，去掉后面出现的标准词及其所拥有的别名词； 
        /// 3、别名之间冲突了，去掉后出现的别名；
        /// 最大长度128
        /// </summary>
        public string name { get; set; }
        /// <summary>
        /// 词的标准名称，所有的标准名称、别名需要保证唯一； 
        /// 如果无法保证唯一性，则系统会做如下容错处理： 
        /// 1、别名与标准词冲突了，去掉别名； 
        /// 2、标准词之间冲突了，去掉后面出现的标准词及其所拥有的别名词； 
        /// 3、别名之间冲突了，去掉后出现的别名；
        /// 最大长度128
        /// </summary>
        public string value { get; set; }
        /// <summary>
        /// 该词的别名，一个标准词可存在多个别名。
        /// </summary>
        public string[] valueAlias { get; set; }

    }

    /// <summary>
    /// 智能家居设备发现的单条响应内容定义
    /// </summary>
    public class SmartHomePayloadObjDef
    {
        /// <summary>
        /// 本设备的设备类型，华为侧语音助手语义解析支持的设备类型，请联系华为侧语音助手接口人获取
        /// </summary>
        public string deviceType { get; set; }
        /// <summary>
        /// 设备名和设备别名定义
        /// </summary>
        public List<SmartHomeDeviceObjDef> deviceList { get; set; }
        /// <summary>
        /// 本设备支持的意图名列表，具体华为侧语音助手语义解析支持的意图名，请联系华为侧语音助手接口人获取
        /// </summary>
        public string[] actionList { get; set; }
        /// <summary>
        /// 本设备支持的房间名和房间别名定义
        /// </summary>
        public List<SmartHomeRoomObjDef> roomList { get; set; }
    }

    /// <summary>
    /// 智能家居设备属性定义，当前仅包括名字和别名
    /// </summary>
    public class SmartHomeDeviceObjDef
    {
        /// <summary>
        /// 该词的标准名称，所有的标准名称、别名需要保证唯一； 
        /// 如果无法保证唯一性，则系统会做如下容错处理： 
        /// 1、别名与标准词冲突了，去掉别名； 
        /// 2、标准词之间冲突了，去掉后面出现的标准词及其所拥有的别名词； 
        /// 3、别名之间冲突了，去掉后出现的别名；
        /// 最大长度128
        /// </summary>
        public string name { get; set; }
        /// <summary>
        /// 词的标准名称，所有的标准名称、别名需要保证唯一； 
        /// 如果无法保证唯一性，则系统会做如下容错处理： 
        /// 1、别名与标准词冲突了，去掉别名； 
        /// 2、标准词之间冲突了，去掉后面出现的标准词及其所拥有的别名词； 
        /// 3、别名之间冲突了，去掉后出现的别名；
        /// 最大长度128
        /// </summary>
        public string value { get; set; }
        /// <summary>
        /// 该词的别名，一个标准词可存在多个别名。
        /// </summary>
        public string[] valueAlias { get; set; }
    }

    /// <summary>
    /// 智能家居房间属性定义，当前仅包括名字和别名
    /// </summary>
    public class SmartHomeRoomObjDef
    {
        /// <summary>
        /// 该词的标准名称，所有的标准名称、别名需要保证唯一； 
        /// 如果无法保证唯一性，则系统会做如下容错处理： 
        /// 1、别名与标准词冲突了，去掉别名； 
        /// 2、标准词之间冲突了，去掉后面出现的标准词及其所拥有的别名词； 
        /// 3、别名之间冲突了，去掉后出现的别名；
        /// 最大长度128
        /// </summary>
        public string name { get; set; }
        /// <summary>
        /// 词的标准名称，所有的标准名称、别名需要保证唯一； 
        /// 如果无法保证唯一性，则系统会做如下容错处理： 
        /// 1、别名与标准词冲突了，去掉别名； 
        /// 2、标准词之间冲突了，去掉后面出现的标准词及其所拥有的别名词； 
        /// 3、别名之间冲突了，去掉后出现的别名；
        /// 最大长度128
        /// </summary>
        public string value { get; set; }
        /// <summary>
        /// 该词的别名，一个标准词可存在多个别名。
        /// </summary>
        public string[] valueAlias { get; set; }
    }

    /// <summary>
    /// 响应体中的分页结构，携带后续查询的分页信息。
    /// </summary>
    public class PaginationRsp
    {
        /// <summary>
        /// 下一次分页请求的开始位置，不携带时没有更多的数据，实际是整数类型。最大16
        /// </summary>
        public string next { get; set; }
        /// <summary>
        /// 所有的数据条目数（不分页）.最小0
        /// </summary>
        public long total { get; set; }
    }

    /// <summary>
    /// 华为设备控制rcu
    /// </summary>
    public class SmartHomeIntentReq
    {
        /// <summary>
        /// 
        /// </summary>
        public string version { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public Session session { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public Endpoint endpoint { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public Header header { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public Inquire inquire { get; set; }
    }

    public class Session
    {
        /// <summary>
        /// 
        /// </summary>
        public string isNew { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string sessionId { get; set; }
    }

    public class Endpoint
    {
        /// <summary>
        /// 
        /// </summary>
        public Auth auth { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public Device device { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string locale { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string roamingCountryCode { get; set; }
    }

    public class Auth
    {
        /// <summary>
        /// 
        /// </summary>
        public Application application { get; set; }
    }

    public class Application
    {
        /// <summary>
        /// 
        /// </summary>
        public string appId { get; set; }
    }

    public class Device
    {
        /// <summary>
        /// 
        /// </summary>
        public string deviceId { get; set; }
        public string oaid { get; set; }
        public string timezone { get; set; }
    }

    public class Header
    {
        /// <summary>
        /// 
        /// </summary>
        public string type { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string timestamp { get; set; }
    }

    public class Inquire
    {
        /// <summary>
        /// 
        /// </summary>
        public string inquireId { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public Intent intent { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public Utterance utterance { get; set; }
    }

    public class Utterance
    {
        public string original { get; set; }//打开客厅的窗帘
        public string type { get; set; }//text
    }

    public class Intent
    {
        /// <summary>
        /// 
        /// </summary>
        public string intentCategoryId { get; set; }
        public string name { get; set; }
        public string originalIntentName { get; set; }
        public bool passNewIntent { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public Slots slots { get; set; }
    }

    public class Slots
    {
        /// <summary>
        /// 设备类型
        /// </summary>
        public SmarthomeDevicetype smarthomeDevicetype { get; set; }
        /// <summary>
        /// 设备名称
        /// </summary>
        public SmarthomeDevicename smarthomeDevicename { get; set; }
        /// <summary>
        /// 场景名称
        /// </summary>
        public SmarthomeRulename smarthomeRulename { get; set; }
        /// <summary>
        /// 所属房间
        /// </summary>
        public SmarthomeRoom smarthomeRoom { get; set; }
        /// <summary>
        /// 所有设备
        /// </summary>
        public SmarthomeAlldevice smarthomeAlldevice { get; set; }
        /// <summary>
        /// 空调设定温度值
        /// </summary>
        public SmarthomeCharactervalue smarthomeCharactervalue { get; set; }
        /// <summary>
        /// 服务或客需名称
        /// </summary>
        public SmarthomeTarget smarthomeTarget { get; set; }
        /// <summary>
        /// 服务或客需动作
        /// </summary>
        public SmarthomeAction smarthomeAction { get; set; }
    }

    public class SmarthomeDevicetype
    {
        /// <summary>
        /// 
        /// </summary>
        public string name { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string slotType { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public List<ValuesItem> values { get; set; }
    }

    public class ValuesItem
    {
        /// <summary>
        /// 
        /// </summary>
        public string real { get; set; }
    }

    public class SmarthomeDevicename
    {
        /// <summary>
        /// 
        /// </summary>
        public string name { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string slotType { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public List<ValuesItem> values { get; set; }
    }

    public class SmarthomeRulename
    {
        /// <summary>
        /// 
        /// </summary>
        public string name { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string slotType { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public List<ValuesItem> values { get; set; }
    }

    public class SmarthomeRoom
    {
        /// <summary>
        /// 
        /// </summary>
        public string name { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string slotType { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public List<ValuesItem> values { get; set; }
    }

    public class SmarthomeAlldevice
    {
        /// <summary>
        /// 
        /// </summary>
        public string name { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string slotType { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public List<ValuesItem> values { get; set; }
    }

    public class SmarthomeCharactervalue
    {
        /// <summary>
        /// 
        /// </summary>
        public string name { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string slotType { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public List<ValuesItem> values { get; set; }
    }
    /// <summary>
    /// 服务或客需名称
    /// </summary>
    public class SmarthomeTarget
    {
        /// <summary>
        /// 
        /// </summary>
        public string name { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string slotType { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public List<ValuesItem> values { get; set; }
    }
    /// <summary>
    /// 服务或客需动作
    /// </summary>
    public class SmarthomeAction
    {
        /// <summary>
        /// 
        /// </summary>
        public string name { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string slotType { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public List<ValuesItem> values { get; set; }
    }

    /// <summary>
    /// 华为意图控制回复
    /// </summary>
    public class SmartHomeIntentRsp
    {
        /// <summary>
        /// 
        /// </summary>
        public string version { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public Reply reply { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string errorCode { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string errorMessage { get; set; }
    }

    public class Reply
    {
        /// <summary>
        /// 
        /// </summary>
        public bool isEndSession { get; set; }
    }

}

