package company_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 CompanyChangeinfoRequest struct {
	// <ext>format:string</ext> 【单位ID】单位ID 【特殊说明】<br>companyId(单位ID)、companyName(单位名称)、registerNo(统一社会信用代码)不能同时为空
	CompanyId *int64 `json:"companyId"`
	// 【单位名称】单位名称 【特殊说明】<br>companyId(单位ID)、companyName(单位名称)、registerNo(统一社会信用代码)不能同时为空
	CompanyName string `json:"companyName,omitempty"`
	// 【统一社会信用代码】统一社会信用代码 【特殊说明】<br>companyId(单位ID)、companyName(单位名称)、registerNo(统一社会信用代码)不能同时为空
	RegisterNo string `json:"registerNo,omitempty"`
	// 【是否获取h5页面】是否获取h5页面，默认获取h5页面
	H5 string `json:"h5,omitempty"`
	// 【页面主题色】自定义页面主题色 【传参说明】<br>支持传入RGB颜色(16进制)
	ThemeColor string `json:"themeColor,omitempty"`
	// 【页面语言】页面语言 【作用】<br>控制认证页面显示的语言 【传参方式】<br>传入String，支持ZH_CN(中文)，EN_US(英文)，ja(日文)
	Language string `json:"language,omitempty"`
	// 【链接过期时间】链接过期时间 【作用】<br>用于设置获取到的链接在多长时间后过期 【传参方式】<br>单位：秒 【特殊说明】<br>当该参数不传值时，其有效期将使用“管理控制台-设置-开放平台-接口页面有效期配置-组织认证接口页面默认有效期“对应的秒数，当此值为“默认”时，其有效期使用“管理控制台-设置-开放平台-接口页面有效期配置-接口页面默认有效期“对应的秒数；当传入的值大于“管理控制台-设置-开放平台-接口页面有效期配置-接口页面最大有效期天数“对应的秒数时，将被设置为该秒数。
	ExpireTime *int64 `json:"expireTime,omitempty"`
	// <ext>inner-type:Json<NameUserInfoRequest></ext> 【用户个人信息】用户个人信息
	User string `json:"user,omitempty"`
	// 【申请人联系方式】申请人联系方式：包括mobile和email 【特殊说明】<br>userId、contact、mobile、email、cardNo、openUserId、number、accountNo至少填写一个，优先级为联系方式 > 手机号 > 邮箱 > 员工编号 > 身份证号 > 三方用户id > 员工账号>契约锁系统用户id
	Contact string `json:"contact,omitempty"`
	// 【申请人手机号】申请人手机号，手机号允许使用大陆、台湾和香港的手机号，台湾和香港的手机号格式为：区号+空格+手机号，例：852 9xxxxxxx。 【特殊说明】<br>userId、contact、mobile、email、cardNo、openUserId、number、accountNo至少填写一个，优先级为联系方式 > 手机号 > 邮箱 > 员工编号 > 身份证号 > 三方用户id > 员工账号>契约锁系统用户id
	Mobile string `json:"mobile,omitempty"`
	// 【申请人邮箱】申请人电子邮箱 【特殊说明】<br>userId、contact、mobile、email、cardNo、openUserId、number、accountNo至少填写一个，优先级为联系方式 > 手机号 > 邮箱 > 员工编号 > 身份证号 > 三方用户id > 员工账号>契约锁系统用户id
	Email string `json:"email,omitempty"`
	// 【申请人身份证号】申请人身份证号 【特殊说明】<br>userId、contact、mobile、email、cardNo、openUserId、number、accountNo至少填写一个，优先级为联系方式 > 手机号 > 邮箱 > 员工编号 > 身份证号 > 三方用户id > 员工账号>契约锁系统用户id
	CardNo string `json:"cardNo,omitempty"`
	// 【申请人用户ID】申请人用户ID，契约锁系统用户唯一ID 【特殊说明】<br>userId、contact、mobile、email、cardNo、openUserId、number、accountNo至少填写一个，优先级为联系方式 > 手机号 > 邮箱 > 员工编号 > 身份证号 > 三方用户id > 员工账号>契约锁系统用户id
	UserId *int64 `json:"userId,omitempty"`
	// 【申请人登录账号】申请人登录账号 【特殊说明】<br>userId、contact、mobile、email、cardNo、openUserId、number、accountNo至少填写一个，优先级为联系方式 > 手机号 > 邮箱 > 员工编号 > 身份证号 > 三方用户id > 员工账号>契约锁系统用户id
	AccountNo string `json:"accountNo,omitempty"`
	// 【申请人员工编号】申请人员工编号，需要搭配组织进行使用 【特殊说明】<br>userId、contact、mobile、email、cardNo、openUserId、number、accountNo至少填写一个，优先级为联系方式 > 手机号 > 邮箱 > 员工编号 > 身份证号 > 三方用户id > 员工账号>契约锁系统用户id
	Number string `json:"number,omitempty"`
	// 【申请人三方业务系统id】申请人三方业务系统id，创建用户不指定由契约锁系统默认生成  【特殊说明】<br>userId、contact、mobile、email、cardNo、openUserId、number、accountNo至少填写一个，优先级为联系方式 > 手机号 > 邮箱 > 员工编号 > 身份证号 > 三方用户id > 员工账号>契约锁系统用户id
	OpenUserId string `json:"openUserId,omitempty"`
	// 【业务系统标识】业务系统标识 【作用】 1：根据第三方业务系统用户id查询系统成员/用户信息时使用 2：涉及到多套业务系统集成且不同系统间第三方业务系统用户id可能重复时需要传入该参数
	SystemCode string                      `json:"systemCode,omitempty"`
	UserObject *common.NameUserInfoRequest `json:"userObject,omitempty"`
}

func (obj CompanyChangeinfoRequest) GetUrl() string {
	return "/company/changeinfo"
}

func (obj CompanyChangeinfoRequest) GetHttpParameter() *http.HttpParameter {
	parameter := http.NewPostHttpParameter()
	parameter.AddParam("companyId", obj.CompanyId)
	parameter.AddParam("companyName", obj.CompanyName)
	parameter.AddParam("registerNo", obj.RegisterNo)
	parameter.AddParam("h5", obj.H5)
	parameter.AddParam("themeColor", obj.ThemeColor)
	parameter.AddParam("language", obj.Language)
	parameter.AddParam("expireTime", obj.ExpireTime)
	parameter.AddParam("contact", obj.Contact)
	parameter.AddParam("mobile", obj.Mobile)
	parameter.AddParam("email", obj.Email)
	parameter.AddParam("cardNo", obj.CardNo)
	parameter.AddParam("userId", obj.UserId)
	parameter.AddParam("accountNo", obj.AccountNo)
	parameter.AddParam("number", obj.Number)
	parameter.AddParam("openUserId", obj.OpenUserId)
	parameter.AddParam("systemCode", obj.SystemCode)
	if obj.UserObject != nil {
		jsonBytes, _ := json.Marshal(obj.UserObject)
		parameter.AddParam("user", string(jsonBytes))
	} else {
		parameter.AddParam("user", obj.User)
	}
	return parameter
}
