package com.fs.qwApi.param;

import lombok.Data;

import java.util.List;

@Data
public class QwCreateUserParam {
    /**
     *  	成员UserID。对应管理端的账号，企业内必须唯一。长度为1~64个字节。只能由数字、字母和“_-@.”四种字符组成，
     *  	且第一个字符必须是数字或字母。系统进行唯一性检查时会忽略大小写。
     */
    private String userid;
    /**
     *  成员名称。长度为1~64个utf8字符
     */
    private String name;

    /**
     *  成员别名。长度1~64个utf8字符
     */
    private String alias;

    /**
     *  手机号码。企业内必须唯一，mobile/email二者不能同时为空
     */
    private String mobile;

    /**
     *  	成员所属部门id列表，不超过100个。当不填写department或id为0时，成员会放在其他（待设置部门）下，
     *  	当填写的部门不存在时，会在在其他（待设置部门）下新建对应部门
     */
    private List<Integer> department;
    /**
     *  部门内的排序值，默认为0，成员次序以创建时间从小到大排列。
     *  个数必须和参数department的个数一致，数值越大排序越前面。有效的值范围是[0, 2^32)
     */
    private List<Integer> order;

    /**
     *  职务信息。长度为0~128个字符
     */
    private String position;

    /**
     *  性别。1表示男性，2表示女性
     */
    private String gender;

    /**
     *  性别。1表示男性，2表示女性
     */
    private String email;
    /**
     *  企业邮箱。仅对开通企业邮箱的企业有效。长度6~64个字节，且为有效的企业邮箱格式。
     *  企业内必须唯一。未填写则系统会为用户生成默认企业邮箱（由系统生成的邮箱可修改一次）
     */
    private String biz_mail;
    /**
     *  	个数必须和参数department的个数一致，表示在所在的部门内是否为部门负责人。1表示为部门负责人，0表示非部门负责人。在审批(自建、第三方)等应用里可以用来标识上级审批人
     */
    private List<Integer> is_leader_in_dept;
    /**
     *  直属上级UserID，设置范围为企业内成员，可以设置最多1个上级
     */
    private List<String> direct_leader;
    /**
     *  启用/禁用成员。1表示启用成员，0表示禁用成员
     */
    private int enable;

    /**
     *  	成员头像的mediaid，通过素材管理接口上传图片获得的mediaid
     */
    private String avatar_mediaid;
    /**
     *  座机。32字节以内，由纯数字、“-”、“+”或“,”组成。
     */
    private String telephone;
    /**
     *  	地址。长度最大128个字符
     */
    private String address;
    /**
     *  	主部门
     */
    private int main_department;
    /**
     *  自定义字段。自定义字段需要先在WEB管理端添加，
     *  见扩展属性添加方法，否则忽略未知属性的赋值。
     */
    private ExtAttr extattr;
    /**
     *  	是否邀请该成员使用企业微信（将通过微信服务通知或短信或邮件下发邀请，
     *  	每天自动下发一次，最多持续3个工作日），默认值为true。
     */
    private boolean to_invite;
    /**
     *  	是否邀请该成员使用企业微信（将通过微信服务通知或短信或邮件下发邀请，每天自动下发一次，最多持续3个工作日），默认值为true。
     */
    private String external_position;
    /**
     *  成员对外属性，字段详情见对外属性
     */
    private ExternalProfile external_profile;



    @Data
    class Text {
        /**
         *  	文本属性内容，长度限制64个UTF8字符
         */
        private String value;
    }

    @Data
    class Web {
        /**
         *  网页的url,必须包含http或者https头
         */
        private String url;
        /**
         *  	网页的展示标题,长度限制12个UTF8字符
         */
        private String title;

    }

    /**
     *  小程序app
     */
    @Data
    class Miniprogram {

        private String appid;
        /**
         *  gram.pagepath	小程序的页面路径
         */
        private String pagepath;
        /**
         *  gram.title	小程序的展示标题
         */
        private String title;
    }


    @Data
    class ExtAttr {
        /**
         *  	属性类型: 0-文本 1-网页
         */
        private int type;
        /**
         *  属性名称： 需要先确保在管理端有创建该属性，否则会忽略
         */
        private String name;
        /**
         *  文本类型的属性
         */
        private Text text;
        /**
         *  网页类型的属性，url和title字段要么同时为空表示清除该属性，要么同时不为空
         */
        private Web web;

        /**
         *  小程序
         */
        private Miniprogram miniprogram;
    }

    @Data
    class WechatChannels {

        /**
         *  视频号名字（设置后，成员将对外展示该视频号）。须从企业绑定到企业微信的视频号中选择，可在“我的企业”页中查看绑定的视频号
         */
        private String nickname;

    }

    @Data
    class ExternalProfile {
        /**
         *  企业对外简称，长度限制12个字符。仅当外部企业类型为“企业”时有效
         */
        private String external_corp_name;
        /**
         *  视频号属性。须从企业绑定到企业微信的视频号中选择，可在“我的企业”页中查看绑定的视频号。
         *  第三方仅通讯录应用可获取；对于非第三方创建的成员，第三方通讯录应用也不可获取。注意：externalcontact/get不返回该字段
         */
        private WechatChannels wechat_channels;
        /**
         *  属性列表列表
         */
        private List<ExtAttr> external_attr;
    }

}
