package com.fs.qwApi.Result;

import lombok.Data;

import java.util.List;

/**
* 获取企业永久授权码
*/
@Data
public class QwPermanentCodeResult {
    private int errcode;
    private String errmsg;
    /**
    * 授权方（企业）access_token,最长为512字节。代开发自建应用安装时不返回
    */
    private String access_token;
    /**
    * 授权方（企业）access_token超时时间（秒）。代开发自建应用安装时不返回。
    */
    private int expires_in;
    /**
    * 企业微信永久授权码,最长为512字节
    */
    private String permanent_code;
    private DealerCorpInfo dealer_corp_info;

    /**
    * 授权方企业信息
    */
    private AuthCorpInfo auth_corp_info;
    /**
    * 	授权信息。如果是通讯录应用，且没开启实体应用，是没有该项的。通讯录应用拥有企业通讯录的全部信息读写权限。「第三方会话存档接口」不返回该字段
    */
    private AuthInfo auth_info;
    /**
    * 授权管理员的信息
    */
    private AuthUserInfo auth_user_info;
    /**
    * 推广二维码安装相关信息
    */
    private RegisterCodeInfo register_code_info;
    /**
    * 安装应用时，扫码或者授权链接中带的state值。详见state说明
    */
    private String state;

    @Data
    public static class DealerCorpInfo {
        /**
        * 代理服务商企业微信id
        */
        private String corpid;
        /**
        * 代理服务商企业微信名称
        */
        private String corp_name;

    }
    @Data
    public static class AuthCorpInfo {
        /**
        * 授权方企业微信id
        */
        private String corpid;
        /**
        * 授权方企业名称，即企业简称
        */
        private String corp_name;
        /**
        * 	授权方企业类型，认证号：verified, 注册号：unverified
        */
        private String corp_type;
        /**
        * 授权方企业方形头像
        */
        private String corp_square_logo_url;
        /**
        * 授权方企业用户规模
        */
        private int corp_user_max;
        /**
        * 授权方企业的主体名称(仅认证或验证过的企业有)，即企业全称。企业微信将逐步回收该字段，后续实际返回内容为企业名称，即auth_corp_info.corp_name。
        */
        private String corp_full_name;
        /**
        * 认证到期时间
        */
        private long verified_end_time;
        /**
        * 	企业类型，1. 企业; 2. 政府以及事业单位; 3. 其他组织, 4.团队号
        */
        private int subject_type;
        /**
        * 授权企业在微信插件（原企业号）的二维码，可用于关注微信插件
        */
        private String corp_wxqrcode;
        /**
        * 企业规模。当企业未设置该属性时，值为空。成员授权下，即auth_info.agent.auth_mode为1时值为空
        */
        private String corp_scale;
        /**
        * 	企业所属行业。当企业未设置该属性时，值为空。成员授权下，即auth_info.agent.auth_mode为1时值为空
        */
        private String corp_industry;
        /**
        * 企业所属子行业。当企业未设置该属性时，值为空。成员授权下，即auth_info.agent.auth_mode为1时值为空
        */
        private String corp_sub_industry;
    }
    @Data
    public static class AuthInfo {
        /**
        * 授权的应用信息，注意是一个数组，但仅旧的多应用套件授权时会返回多个agent，对新的单应用授权，永远只返回一个agent
        */
        private List<Agent> agent;

        @Data
        public static class Agent {
            /**
            * 授权方应用id
            */
            private int agentid;
            /**
            * 授权方应用名字
            */
            private String name;
            /**
            * 授权方应用方形头像
            */
            private String round_logo_url;
            /**
            * 授权方应用圆形头像
            */
            private String square_logo_url;
            /**
            * 	旧的多应用套件中的对应应用id，新开发者请忽略
            */
            private int appid;
            /**
            * 	授权模式，0为管理员授权；1为成员授权
            */
            private int auth_mode;
            /**
            * 	是否为代开发自建应用
            */
            private boolean is_customized_app;
            /**
            * 来自第三方应用接口唤起,仅通过第三方应用添加自建应用 获取授权链接授权代开发自建应用时，才返回该字段
            */
            private boolean auth_from_thirdapp;
            /**
            * 应用对应的权限
            */
            private Privilege privilege;
            /**
            * 共享了应用的企业信息，仅当由企业互联或者上下游共享应用触发的安装时才返回
            */
            private SharedFrom shared_from;

            @Data
            public static class Privilege {
                /**
                * 权限等级。
                 * 1:通讯录基本信息只读
                 * 2:通讯录全部信息只读
                 * 3:通讯录全部信息读写
                 * 4:单个基本信息只读
                 * 5:通讯录全部信息只写
                */
                private int level;
                /**
                * 应用可见范围（部门）
                */
                private List<Integer> allow_party;
                /**
                * 应用可见范围（成员）
                */
                private List<String> allow_user;
                /**
                * 应用可见范围（标签）
                */
                private List<Integer> allow_tag;
                /**
                * 额外通讯录（部门）
                */
                private List<Integer> extra_party;
                /**
                * 额外通讯录（成员）
                */
                private List<String> extra_user;
                /**
                * 	额外通讯录（标签）
                */
                private List<Integer> extra_tag;

            }
            @Data
            public static class SharedFrom {
                /**
                * 	共享了应用的企业信息
                */
                private String corpid;
                /**
                * 共享了途径，0表示企业互联，1表示上下游
                */
                private int share_type;

            }
        }
    }
    @Data
    public static class AuthUserInfo {
        /**
        * 	授权管理员的userid，可能为空
        */
        private String userid;

        /**
        * 授权管理员的open_userid，可能为空
        */
        private String open_userid;
        /**
        * 	授权管理员的name，可能为空
        */
        private String name;
        /**
        * 授权管理员的头像url，可能为空
        */
        private String avatar;

    }
    @Data
    public static class RegisterCodeInfo {
        /**
        *   注册码
        */
        private String register_code;
        /**
        * 推广包ID
        */
        private String template_id;
        /**
        * 仅当获取注册码指定该字段时才返回
        */
        private String state;

    }
}
