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

type ChainEvidenceCompleteReportApplyRequest struct {
	// <ext>core:true</ext> 【出证来源】出证来源 【作用】 用来区分出证数据的来源 1、电子签约存证：即申请电子签约文件的出证 2、数据签名存证：即申请数据签名文件的出证 3、可信身份存证：即申请可信数字身份核验结果的出证 4、自主数据存证：即申请自主数据存证的出证 【传参】 取值范围：1（电子签约存证）， 2（数据签名存证）， 3（可信身份存证）， 4（自主数据存证）。
	ProveSource *int64 `json:"proveSource"`
	// <ext>core:true</ext> 【存证编号】存证编号 【作用】 电子签约、数据签名、可信身份、自主数据存证完成后，会生成一个唯一的编号，即存证编号，可通过存证编号申请出证。存证编号可在存证详情页获取或通过存证接口回调参数中获取 【传参】 1、最大长度：20。 2、存证编号与出证数据id必传其一。
	ChainId string `json:"chainId,omitempty"`
	// <ext>core:true</ext> 【出证数据id】出证数据id 【作用】 1.若是针对电子签约出证，可传入电子签约文件id，该参数可针对该条电子签约流程出具完整版存证报告 2.若是针对数据签名出证，可传入数据签名id，该参数可针对该条数据签名出具存证报告完整版 3.若是针对可信身份出证，可传入可信身份核验id，该参数可针对当前核验人该条核验数据出具完整版存证报告 4.若是针对自主数据存证进行出证，可传入第三方业务系统存证数据id，该参数可针对该条存证数据出具完整版存证报告 【传参】 1、最大长度：256。 2、出证数据id与存证编号必传其一。
	ProveDataId string `json:"proveDataId,omitempty"`
	// <ext>core:true</ext> 【需出证的签署文档id范围】需出证的签署文档id范围 【作用】 若是针对电子签约文件出证，可传入电子签约流程下部分签署文档id出具存证报告完整版。不传值时，默认为针对整条电子签约流程下所有签署文档出证 【传参】 以数组的字符串形式传入，若传入多个时中间通过逗号（必须是英文逗号）隔开。
	DocumentIds string `json:"documentIds,omitempty"`
	// <ext>core:true</ext> 【出证备案材料】出证备案材料 【作用】 由于完整版存证报告中含有个人隐私信息，故出证时请出具法院或公安局的调查令或调取证据通知书 【传参】 最多支持上传10份文件，每份文件上限50M
	ProveMaterial []*os.File `json:"proveMaterial"`
	// <ext>inner-type:Json<NotaryOperatorInfo>;core:true</ext> 【操作人】操作人 【作用】 可传入业务系统中进行数据出证的操作人，传入后将在电子签章前台的存证详情与审计中进行记录，方便后期追溯 【传参】 1、参数必传其一（除姓名外），传入多个参数时只按参数中最高优先级查询，优先级为用户id>联系方式>手机号>邮箱>成员编号>证件号>第三方业务系统用户id>登录账号。 2、同时分配给操作人当前出证数据的查看权限，若不创建用户，则不分配查看权限。 3、若用户不存在时或当操作人未传时，审计日志将记录调用此接口的应用名称。
	OperatorInfo       string                     `json:"operatorInfo"`
	OperatorInfoObject *common.NotaryOperatorInfo `json:"operatorInfoObject,omitempty"`
}

func (obj ChainEvidenceCompleteReportApplyRequest) GetUrl() string {
	return "/chain/evidence/complete/report/apply"
}

func (obj ChainEvidenceCompleteReportApplyRequest) GetHttpParameter() *http.HttpParameter {
	parameter := http.NewPostHttpParameter()
	parameter.AddParam("proveSource", obj.ProveSource)
	parameter.AddParam("chainId", obj.ChainId)
	parameter.AddParam("proveDataId", obj.ProveDataId)
	parameter.AddParam("documentIds", obj.DocumentIds)
	parameter.AddListFiles("proveMaterial", obj.ProveMaterial)
	if obj.OperatorInfoObject != nil {
		jsonBytes, _ := json.Marshal(obj.OperatorInfoObject)
		parameter.AddParam("operatorInfo", string(jsonBytes))
	} else {
		parameter.AddParam("operatorInfo", obj.OperatorInfo)
	}
	return parameter
}
