package user_request

import (
	"encoding/json"
	"git.sxidc.com/student-physical-examination/contract_lock_sdk/http"
	"git.sxidc.com/student-physical-examination/contract_lock_sdk/model/common"
)

type UserV2CreateRequest struct {
	// <ext>core:true</ext> 【第三方业务系统该用户id】第三方业务系统该用户id 【作用】 可传入第三方业务系统中唯一的用户id，方便后续的查询与管理 【特殊说明】 若当前id已被占用，则将报错无法创建
	OpenUserId string `json:"openUserId,omitempty"`
	// <ext>core:true</ext> 【用户姓名】用户姓名
	Name string `json:"name"`
	// <ext>core:true</ext> 【用户证件类型】用户证件类型 【作用】 可传入用户认证时的默认证件类型，认证时可修改 【传参】 取值范围：IDCARD(\"二代身份证\")，PASSPORT(\"护照\")，HKMP(\"港澳通行证\")，MTPS(\"台胞证\")。
	PaperType string `json:"paperType,omitempty"`
	// <ext>core:true</ext> 【证件号】证件号 【作用】 可传入用户认证时的默认证件号码，认证时可修改
	CardNo string `json:"cardNo,omitempty"`
	// <ext>core:true;format:phone</ext>  【手机号】手机号 【作用】 用于用户查询、账号登录、文件接收与发送通知 【传参】 1、手机号允许使用大陆、港澳台、国际手机号，手机号格式为：区号+空格+手机号，例：852 9xxxxxxx ，大陆手机号可以不传区号。 2、手机号、邮箱、自定义登录账号、成员编号至少传入一个。
	Mobile                string                        `json:"mobile,omitempty"`
	UserInfoRequestConfig *common.UserInfoRequestConfig `json:"userInfoRequestConfig,omitempty"`
	// <ext>core:true;format:email</ext> 【邮箱】邮箱 【作用】 用于用户查询、账号登录、文件接收与发送通知 【传参】 1、邮箱需传入符合格式的字符串，例：xxxxxxxx@163.com。 2、手机号、邮箱、自定义登录账号、成员编号至少传入一个，若用户邮箱已被其他用户绑定，则无法创建。
	Email string `json:"email,omitempty"`
	// <ext>core:true</ext> 【登录账号】登录账号 【作用】 用于用户查询、账号登录 【传参】 1、支持传入字母、数字、符号。 2、手机号、邮箱、自定义账号、成员编号至少传入一个，若登录账号已被其他用户绑定，则无法创建。
	AccountNo string `json:"accountNo,omitempty"`
	// <ext>core:true</ext> 【成员编号】成员编号 【作用】 用于用户查询、账号登录 【传参】 1、支持传入字母、数字、符号。 2、手机号、邮箱、自定义账号、成员编号至少传入一个，若成员编号已被其他用户绑定，则无法创建。
	Number string `json:"number,omitempty"`
	// <ext>core:true</ext> 【用户初始密码】用户初始密码 【作用】 用于用户登录 【传参】 用户初始登录密码，登录后若【电子签章管理后台】-【设置】-【签署平台】开启【若登录密码为管理员创建时设置或重置密码，用户登录后必须更新密码】时，用户登录后会强制用户进行密码修改。
	Password string `json:"password,omitempty"`
	// <ext>core:true</ext> 【人员类型】人员类型 【作用】 用于区分是单位内成员还是外部用户，暂不支持为外部单位添加成员 【传参】 取值范围：true（内部用户），false（外部用户）；不传值默认为：true（内部用户）。
	IsInner *bool `json:"isInner,omitempty"`
	// <ext>core:true</ext> 【别名】别名 【作用】 用户使用英文样式的FDA签名时，“签署人姓名”需显示英文时，可在别名中进行维护 【特殊说明】 FDA签名为付费功能，请在功能开启后使用
	PrintSignature string `json:"printSignature,omitempty"`
	// <ext>core:true</ext> 【唯一标识码】唯一标识码 【作用】 用户的唯一标识码将展示在FDA签名中 【特殊说明】 FDA签名为付费功能，请在功能开启后使用
	UniqueSymbol string `json:"uniqueSymbol,omitempty"`
	// <ext>core:true</ext> 【内部用户所属组织】内部用户所属组织 【作用】 用于指定内部用户所属组织 【传参】 内部用户时可指定组织，不传默认平台方的顶级组织，仅可添加至内部组织或独立管理组织。若人员类型为外部用户时，此时传入外部/内部组织信息将会报错。
	SubDepartmentList []*common.UserV2CreateSubDepartmentListRequest `json:"subDepartmentList,omitempty"`
	// 【是否信任第三方认证】是否信任第三方认证 【作用】 是否信任第三方认证可直接申请契约锁云证书 【传参说明】 不传则为否，传时是姓名、证件类型、证件号必传（该参数需要隐藏，不在接口文档内体现）
	TrustThirdAuth *bool `json:"trustThirdAuth,omitempty"`
}

func (obj UserV2CreateRequest) GetUrl() string {
	return "/user/v2/create"
}

func (obj UserV2CreateRequest) GetHttpParameter() *http.HttpParameter {
	parameter := http.NewPostHttpParameter()
	jsonBytes, _ := json.Marshal(obj)
	parameter.SetJsonParamer(string(jsonBytes))
	return parameter
}
