package contract_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 ContractInitiateCancelRequest 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>core:true</ext> 【作废原因】作废原因。 【传参】 最大长度：300字。
	Reason string `json:"reason"`
	// <ext>core:true</ext> 【作废方式】作废方式 【作用】 作废方式包括2种： 1、所有签署方全部确认作废：发起作废后，需原文件中参与签署的所有签署主体对作废声明进行作废确认后，才会将原文件状态修改为“已作废”，并对原文件加盖作废章或销毁 2、发起方单方确认作废： 发起作废后，仅需发起方内所有签署主体对作废声明进行作废确认后，就会将原文件状态修改为“已作废”，并对原文件加盖作废章，但不支持对原文件进行销毁操作 【传参】 取值范围：ALL_CONFIRM（所有签署方全部确认作废），SPONSOR_SINGLE_CONFIRM（发起方单份确认作废）；未传入时默认取用印流程配置 【特殊说明】 1、用印流程仅配置1种作废方式时，未传入时取流程配置，用印流程配置多种作废方式时，默认为“所有签署方全部作废” 2、发起方未参与签署时，不支持发起方单方确认作废，按所有签署方全部确认作废 方式完成作废
	TerminalWay string `json:"terminalWay,omitempty"`
	// <ext>core:true</ext> 【是否删除原电子签约文件】是否删除原电子签约文件 【作用】 控制作废成功后是否需要将原文件删除 【传参】 取值范围：true（作废成功后删除原文件），false（作废成功后不删除原文件）；默认false（作废成功后不删除原文件）。
	RemoveContract *bool `json:"removeContract,omitempty"`
	// <ext>core:true</ext> 【自定义作废声明文档ID】自定义作废声明文档ID。 【作用】 可使用自定义文档作为原文件的作废声明，但因转换文档需要时间，如在本接口发起文件时同步转换文档会导致发起文件耗时较长，所以需提前调用创建文档相关接口转换为签署文档id后再通过此参数填写。创建文档接口如下： 1、上传本地文件创建签署文档 /v2/document/createbyfile ：选择本地的文件转换为PDF格式的签署文档 2、使用模板创建签署文档 /document/createbytemplate：传入系统中已维护的文件模板id，将模板转换成PDF格式的签署文档 3、多模板创建签署文档 /document/createbytemplates：传入系统中多个已维护的文件模板id，将模板转换为PDF格式的签署文档 4、多文件合并创建签署文档 /document/createbyfiles：选择多个本地的文件，合并并转换为PDF格式的签署文档 5、根据路径下的文件创建签署文档 /v2/document/createbyurl：使用传入的url获取文件转换为PDF格式的签署文档，支持本地路径/网络路径或ftp存储路径的文件 6、根据OFD文档创建签署文档 /document/createbyofd ：选择本地的OFD文件创建签署文档，签署文档格式仍是OFD，主要适用于国产化场景
	DocumentId string                  `json:"documentId,omitempty"`
	User       *common.UserInfoRequest `json:"user,omitempty"`
	// <ext>core:true</ext> 【签署方】签署方
	Signatories []*common.Signatory `json:"signatories,omitempty"`
	// <ext>core:true</ext> 【需作废的签署文档ID】需作废的签署文档ID 【作用】 当电子签约中包括多份签署文档时，需作废部分文档时，可传入此参数指定需作废的文档范围，签署文档id可通过/contract/detail获取 【传参】 传入需作废的文档ID，支持传入多项，例如[123456,123456]
	NeedCancelDocs []int64 `json:"needCancelDocs,omitempty"`
	// <ext>core:true</ext>【签署方】签署方
	TerminalSignatories []*common.TerminalSignatory `json:"terminalSignatories,omitempty"`
}

func (obj ContractInitiateCancelRequest) GetUrl() string {
	return "/contract/initiate/cancel"
}

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