package others_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 CrossborderContractSignurlV3Request struct {
	// <ext>core:true;format:string</ext> 【跨境电子签约文件id】跨境电子签约文件id 【作用】 查询需要获取签署页面的跨境电子签约文件 【传参】 电子签约文件id和第三方业务系统文件id必传其一，均传入以电子签约文件id为准。
	ContractId *int64 `json:"contractId,omitempty"`
	// <ext>core:true</ext> 【第三方业务系统文件id】第三方业务系统文件id 【作用】 查询需要获取签署页面的跨境电子签约文件 【传参】 电子签约文件id和第三方业务系统文件id必传其一，均传入以电子签约文件id为准
	BizId string `json:"bizId,omitempty"`
	// <ext>deprecated:true;format:string</ext> 【签署方ID（公司ID/个人ID）】签署方ID（公司ID/个人ID），和tenantName不能同时为空
	TenantId *int64 `json:"tenantId,omitempty"`
	// <ext>core:true</ext> 【签署方名称】签署方名称 【作用】 查询需获取签署页面的签署方
	TenantName string `json:"tenantName"`
	// <ext>core:true</ext> 【签署方类型】签署方类型 【作用】 查询需获取签署页面的签署方 【传参】 取值范围：COMPANY（组织）,PERSONAL（个人）
	TenantType string `json:"tenantType"`
	// <ext>core:true</ext> 【签署方编号】签署方编号 【作用】 查询需获取签署页面的签署方
	SignatoryNo string `json:"signatoryNo,omitempty"`
	// <ext>core:true</ext> 【经办人姓名】经办人姓名 【作用】 查询到签署方时，不生效
	ReceiverName string `json:"receiverName,omitempty"`
	// <ext>core:true</ext> 【经办人联系方式】经办人联系方式 【作用】 用于查询用户，作为内部组织签署方的经办人或个人签署方 【传参】 1、可传入用户手机号或者邮箱（个人签署方仅支持传入邮箱） 2、手机号允许使用大陆、港澳台、国际手机号，手机号格式为：区号+空格+手机号，例：852 9xxxxxxx ，大陆手机号可以不传区号。 3、邮箱需传入符合格式的字符串，例：xxxxxxxx@163.com。 4、传入该参数查询用户时，若用户不存在时，则使用传入的联系方式创建新用户，并将该用户加入组织。
	Contact string `json:"contact,omitempty"`
	// 【经办人成员编号】经办人成员编号 【作用】 查询到签署时，用于获取对应用户的签署页面 【传参】 1、当未传入联系方式时，可使用成员编号、第三方业务系统用户id查询用户，作为内部组织签署方的经办人，或个人签署方。 2、成员编号、第三方业务系统用户id均传入时，以成员编号为准。 3、若使用成员编号查询用户，若用户不存在，则将使用传入的成员编号创建新用户，并将该用户加入组织。若查询的用户未绑定邮箱，则报错
	ReceiverNumber string `json:"receiverNumber,omitempty"`
	// 【经办人第三方业务系统用户id】经办人第三方业务系统用户id 【作用】 查询到签署时，用于获取对应用户的签署页面 【传参】 1、当未传入联系方式时，可使用成员编号、第三方业务系统用户id查询用户，作为组织签署方的经办人，或个人签署方。 2、成员编号、第三方业务系统用户id均传入时，以成员编号为准。 3、使用该参数查询用户，若用户不存在或用户未绑定邮箱时，将会报错提示。
	OpenUserId string `json:"openUserId,omitempty"`
	// 【链接有效期】链接有效期 【作用】 1、用于设置获取到的链接在多长时间后过期 2、参数不传值时，链接有效期取电子签章管理后台设置的“接口页面默认有效期  3、参数传入时长超过电子签章管理后台设置的“接口页面最大有效期天数”时，将以后台设置的有效期为准 【传参】 最小值：1。单位：秒。
	ExpireTime *int64 `json:"expireTime,omitempty"`
	// <ext>deprecated:true</ext> 【是否可以同时签署法人章】是否可以同时签署法人章： 【传参】 1、取值范围：1（是），0（否）；默认为：0（否）
	CanLpSign string `json:"canLpSign,omitempty"`
	// 【回调页面】回调页面； 【作用】 用户在签署（或审批）后，如果不需要继续签署（或审批），则会跳转到回调页面
	CallbackPage string `json:"callbackPage,omitempty"`
	// 【 页面语言】 页面语言 【作用】 1、用于指定链接页面使用的语言 2、英文和日文页面为付费功能，请确认开通英文版系统和日文版系统后使用 【传参】 取值范围：ZH_CN(中文)，EN_US(英文)，JP(日文)；不传值默认为：ZH_CN（中文）。
	Language string `json:"language,omitempty"`
	// <ext>format:string</ext> 【页面默认展示的文档ID】页面默认展示的文档ID 【作用】 电子签约中包含多个签署文档时，可指定页面默认展示的文档 【特殊说明】 仅控制默认展示哪份文档，但是用户仍然可以手动切换查看其他文档
	DocumentId *int64 `json:"documentId,omitempty"`
	// 【页面是否显示返回按钮】页面是否显示返回按钮 【传参】 取值范围：true（显示按钮），false（隐藏按钮）；不传值默认为：true（显示按钮）。
	CanReturn *bool `json:"canReturn,omitempty"`
	// 【页面是否显示撤回/回退/拒签按钮】页面是否显示撤回/回退/拒签按钮 【传参】 取值范围：true（显示按钮），false（隐藏按钮）；不传值默认为：true（显示按钮）。
	CanWithdraw *bool `json:"canWithdraw,omitempty"`
	// 【页面是否显示拒签按钮】页面是否显示拒签按钮 【传参】 取值范围：true（默认打开），false（默认不打开）；不传值默认为：false（默认不打开）
	Rejectable *bool `json:"rejectable,omitempty"`
	// 【页面是否显示下载按钮】页面是否显示下载按钮 【传参】 取值范围：true（显示按钮），false（隐藏按钮）；不传值默认为：true（显示按钮）。
	AllowDownload *bool `json:"allowDownload,omitempty"`
	// 【页面是否显示打印按钮】页面是否显示打印按钮 【传参】 取值范围：true（显示按钮），false（隐藏按钮）；不传值默认为：true（显示按钮）。
	AllowPrint *bool `json:"allowPrint,omitempty"`
	// 【页面是否显示签署详情按钮】页面是否显示签署详情按钮 【传参】 取值范围：true（显示按钮），false（隐藏按钮）；不传值默认为：true（显示按钮）。
	CanViewDetail *bool `json:"canViewDetail,omitempty"`
	// 【页面是否显示“更多操作”按钮】页面是否显示“更多操作”按钮 【传参】 取值范围：true（显示按钮），false（隐藏按钮）；不传值默认为：true（显示按钮）。
	CanMoreOperation *bool `json:"canMoreOperation,omitempty"`
	// 【链接访问次数】链接访问次数 【作用】 1、限制链接访问次数，若超过次数则链接失效 2、若不传值，则访问次数无限制；若传入具体数值，则链接在访问所传具体值次数后失效，无法继续访问 【传参】 最小值：1。单位：次。
	VisitNum *int64 `json:"visitNum,omitempty"`
	// 【链接失效后跳转地址】链接失效后跳转地址 【作用】 当链接页面失效后页面自动跳转至指定地址（如：超过访问次数、链接已超过有效期）
	InvalidToPage string `json:"invalidToPage,omitempty"`
	//  【操作完成自动关闭页面】操作完成自动关闭页面 【作用】 用户在链接页面完成审批或签署操作时，系统是否自动关闭链接页面 【传参】： 取值范围：true（自动关闭），false（不自动关闭）；不传值默认为：false（不自动关闭）。
	AutoClosePage *bool             `json:"autoClosePage,omitempty"`
	PageStyle     *common.PageStyle `json:"pageStyle,omitempty"`
	// 【客户端类型】客户端类型 【作用】 1、当请求的UserAgent无法自动判断返回的页面类型时，可通过此参数返回指定客户端的页面 2、例如在微信小程序集成场景中，PC端小程序的UserAgent只能识别为PC端，但是需要使用H5端的页面 【传参】 取值范围：PC（返回PC页面），H5（返回H5页面）；不传值默认为：根据请求的UserAgent自动判断返回的页面类型。
	DeviceType string `json:"deviceType,omitempty"`
}

func (obj CrossborderContractSignurlV3Request) GetUrl() string {
	return "/cross-border/contract/signurl/v3"
}

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