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 ChainCustomNotaryRequest struct {
	// <ext>core:true</ext> 【存证数据名称】存证数据名称 【传参】 最大长度：256。
	NotaryName string `json:"notaryName"`
	// <ext>core:true</ext> 【第三方业务系统存证数据id】第三方业务系统存证数据id 【作用】 传入第三方业务系统中唯一的存证数据id，便于后续查询和管理 【传参】 最大长度：256。
	NotaryDataID string `json:"notaryDataID,omitempty"`
	// <ext>core:true</ext> 【存证数据类型】存证数据类型 【作用】 1.数据hash ：即可自行计算需要存证的数据的hash值进行存证 2.数据原文：即可直接传入需要存证的数据的原文件，由电子签章系统计算hash值后进行存证 【传参】 取值范围：HASH（数据hash），FILE（数据原文）。
	NotaryType string `json:"notaryType"`
	// <ext>core:true</ext> 【数据原文】数据原文 【作用】 支持传入需要存证的数据的原文，系统将使用数据原文hash算法中指定的算法计算文本hash值后进行存证
	NotaryData *os.File `json:"notaryData,omitempty"`
	// <ext>core:true</ext> 【文件类型】文件类型 【作用】 可支持入数据原文的文件类型，后续在系统中可通过文件类型进行检索 【传参】 1、最大长度：32。 2、notaryType（存证数据类型）为FILE（数据原文）时必传。 3、可支持传入pdf,xlsx,pptx,docx,doc,wps,xls,ppt,png,webp,tiff,xml,xht,xhtml,htm,html,txt,jpg,jpeg,png,gif,avi,zip,rtf,mp3,mp4,rm,rmvb,wmv,asf,asx,mov,m4v等。
	FileType string `json:"fileType,omitempty"`
	// <ext>core:true</ext> 【数据原文hash算法】数据原文hash算法 【作用】 可传入需要计算数据原文的hash值的算法 【传参】 1、notaryType（存证数据类型）为FILE（数据原文）时必传。 2、目前仅支持SHA256（SHA256）。
	HashAlgorithm string `json:"hashAlgorithm,omitempty"`
	// <ext>core:true</ext> 【数据原文是否存储】数据原文是否存储 【作用】 可选择是否将接口传入的数据存证原文在私有云存储。存储后，后续可通过存证列表直接查看存证原文 【传参】 1、notaryType（存证数据类型）为FILE（数据原文）时可传值。 2、取值范围：false（存证数据原文不需要存储至私有云），true（存证数据原文需要存储至私有云）；不传值默认为：电子签章管理后台配置。
	StorageFile string `json:"storageFile,omitempty"`
	// <ext>core:true</ext> 【数据hash】数据hash 【作用】 传入自行计算的存证数据hash值，系统将对传入的hash值进行存证。推荐使用SHA256算法计算hash值，否则无法存证至蚂蚁区块链 【传参】 notaryType（存证数据类型）为HASH（数据hash）时必传。
	NotaryDataHash string `json:"notaryDataHash,omitempty"`
	// <ext>inner-type:Json<NotaryCompanyInfo>;core:true</ext> 【单位存证主体】单位存证主体信息 【作用】 单位和个人至少有一个存证主体，都传入时优先以单位主体进行存证，后续若涉及到出证，需要以存证主体的名义进行出证
	CompanyInfo string `json:"companyInfo,omitempty"`
	// <ext>inner-type:Json<NotaryUserInfo>;core:true</ext> 【个人存证主体】个人存证主体信息 【作用】 单位和个人至少有一个存证主体，都传入时优先以单位主体进行存证，后续若涉及到出证，需要以存证主体的名义进行出证
	UserInfo string `json:"userInfo,omitempty"`
	// <ext>inner-type:Json<NotaryOperatorInfo>;core:true</ext> 【操作人】操作人信息 【作用】 可传入业务系统中进行数据存证的操作人，传入后将在电子签章前台的存证详情与审计中进行记录，方便后期追溯 【传参】 1、参数必传其一（除姓名外），传入多个参数时只按参数中最高优先级查询，优先级为用户id>联系方式>手机号>邮箱>成员编号>证件号>第三方业务系统用户id>登录账号。 2、同时分配给操作人当前存证数据的查看权限，若不创建用户，则不分配查看权限。 3、若用户不存在时或当操作人未传时，审计日志将记录调用此接口的应用名称。
	OperatorInfo       string                     `json:"operatorInfo,omitempty"`
	OperatorInfoObject *common.NotaryOperatorInfo `json:"operatorInfoObject,omitempty"`
	UserInfoObject     *common.NotaryUserInfo     `json:"userInfoObject,omitempty"`
	CompanyInfoObject  *common.NotaryCompanyInfo  `json:"companyInfoObject,omitempty"`
}

func (obj ChainCustomNotaryRequest) GetUrl() string {
	return "/chain/custom/notary"
}

func (obj ChainCustomNotaryRequest) GetHttpParameter() *http.HttpParameter {
	parameter := http.NewPostHttpParameter()
	parameter.AddParam("notaryName", obj.NotaryName)
	parameter.AddParam("notaryDataID", obj.NotaryDataID)
	parameter.AddParam("notaryType", obj.NotaryType)
	parameter.AddParam("fileType", obj.FileType)
	parameter.AddParam("hashAlgorithm", obj.HashAlgorithm)
	parameter.AddParam("storageFile", obj.StorageFile)
	parameter.AddParam("notaryDataHash", obj.NotaryDataHash)
	parameter.AddFiles("notaryData", obj.NotaryData)
	if obj.UserInfoObject != nil {
		jsonBytes, _ := json.Marshal(obj.UserInfoObject)
		parameter.AddParam("userInfo", string(jsonBytes))
	} else {
		parameter.AddParam("userInfo", obj.UserInfo)
	}
	if obj.OperatorInfoObject != nil {
		jsonBytes, _ := json.Marshal(obj.OperatorInfoObject)
		parameter.AddParam("operatorInfo", string(jsonBytes))
	} else {
		parameter.AddParam("operatorInfo", obj.OperatorInfo)
	}
	if obj.CompanyInfoObject != nil {
		jsonBytes, _ := json.Marshal(obj.CompanyInfoObject)
		parameter.AddParam("companyInfo", string(jsonBytes))
	} else {
		parameter.AddParam("companyInfo", obj.CompanyInfo)
	}
	return parameter
}
