package seal_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"
	"os"
)

type SealPersonalCreateRequest struct {
	// <ext>inner-type:Json<UserInfoRequest>;core:true</ext> 【个人用户】个人用户 【作用】 指定需要制作签名/名章的用户 【传参】 1、参数必传其一，传入多个参数时只按参数中最高优先级查询，优先级为用户id>联系方式>手机号>邮箱>成员编号>证件号>第三方业务系统用户id>登录账号。 2、若用户不存在时，将会报错。
	User string `json:"user"`
	// <ext>format:base64;core:true</ext> 【签名图片base64编码】签名图片base64编码 【传参】 签名图片base64编码和签名图片文件必传其一，均传入以签名图片base64编码为准。
	ImgFileBase64 string `json:"imgFileBase64,omitempty"`
	// <ext>core:true</ext> 【签名图片文件】签名图片文件 【传参】 签名图片base64编码和签名图片文件必传其一，均传入以签名图片base64编码为准。
	ImgFile *os.File `json:"imgFile,omitempty"`
	// 【签名/名章宽度】签名/名章宽度 【传参】 1、最小值：0（不包含），最大值：100（包含）。 2、单位：mm。 3、仅传入宽度时，图片的高度按该图片本身的比例适配。 4、宽度和高度均传入，则以传入的宽度和高度作为签名/名章的规格。 5、若宽度和高度都不传，则默认规格为“40*16”。 3、若宽度和高度都不传，则默认规格为“40*16”
	Width *int64 `json:"width,omitempty"`
	// 【签名/名章高度】签名/名章高度 【传参】 1、最小值：0（不包含），最大值：100（包含）。 2、单位：mm。 3、仅传入高度时，图片的宽度按该图片本身的比例适配。 4、宽度和高度均传入，则以传入的宽度和高度作为签名/名章的规格。 5、若宽度和高度都不传，则默认规格为“40*16”。 2、若宽度和高度都不传，则默认规格为“40*16”
	Height *int64 `json:"height,omitempty"`
	// <ext>core:true</ext> 【签名分类】签名分类 【作用】 1、当传“个人签名”时，制作的是个人签名，个人签名在签署时可以任意调整大小 2、当传“个人名章”时，制作的是个人名章，个人名章在签署时大小固定，不能调整 【传参】 取值范围：PERSON_SIGN（个人签名），PERSON_SEAL（个人名章）；不传值默认为：PERSON_SIGN（个人签名）。
	PersonSealCarrier string `json:"personSealCarrier,omitempty"`
	// 【签名类型】签名类型 【作用】 用于指定本次制作的签名的类型，签名类型可在电子签约控制台“签名类型管理”中维护 【传参】 1、若传入的签名类型不存在，接口将报错。 2、若不传，则使用当前已启用的创建时间最早的类型。
	PersonSealCategoryName string `json:"personSealCategoryName,omitempty"`
	// 【是否设为默认】是否设为默认 【作用】 1、当签名分类为“个人签名”时，此参数用于设置默认签名 2、当签名分类为“个人名章”时，此参数用于设置默认名章 3、电子签约文件批量/自动签署时，将使用默认签名或默认名章 【传参】 取值范围：true（设为默认），false（不设为默认）；不传值默认为：false（不设为默认）。
	Primary string `json:"primary,omitempty"`
	// <ext>core:true</ext> 【签名状态】签名状态 【作用】 1、用于设置签名创建后的初始状态 2、启用状态的签名在电子签章平台可见、签署时可用 3、预制作状态的签名在电子签章平台不可见、签署时不可用；若需要先在业务系统中审批签名，可以将初始状态设为“预制作”，审批通过后再调变更签名状态接口启用签名 【传参】 取值范围：NORMAL（启用），PRE_ADD（预制作）；不传值默认为：NORMAL（启用）。
	PersonSealStatus string                  `json:"personSealStatus,omitempty"`
	UserObject       *common.UserInfoRequest `json:"userObject,omitempty"`
}

func (obj SealPersonalCreateRequest) GetUrl() string {
	return "/seal/personal/create"
}

func (obj SealPersonalCreateRequest) GetHttpParameter() *http.HttpParameter {
	parameter := http.NewPostHttpParameter()
	parameter.AddParam("imgFileBase64", obj.ImgFileBase64)
	parameter.AddParam("width", obj.Width)
	parameter.AddParam("height", obj.Height)
	parameter.AddParam("personSealCarrier", obj.PersonSealCarrier)
	parameter.AddParam("personSealCategoryName", obj.PersonSealCategoryName)
	parameter.AddParam("primary", obj.Primary)
	parameter.AddParam("personSealStatus", obj.PersonSealStatus)
	parameter.AddFiles("imgFile", obj.ImgFile)
	if obj.UserObject != nil {
		jsonBytes, _ := json.Marshal(obj.UserObject)
		parameter.AddParam("user", string(jsonBytes))
	} else {
		parameter.AddParam("user", obj.User)
	}
	return parameter
}
