package document_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 DocumentAddbyurlRequest struct {
	// <ext>core:true</ext> 【文件签约文件id】文件签约文件id 【作用】 查询需添加签署文档的电子签约文件 【传参】 电子签约文件id和第三方业务系统文件id必传其一，均传入以电子签约文件id为准
	ContractId string `json:"contractId,omitempty"`
	// <ext>core:true</ext> 【第三方业务系统文件id】第三方业务系统文件id 【作用】 查询需添加签署文档的电子签约文件 【传参】 电子签约文件id和第三方业务系统文件id必传其一，均传入以电子签约文件id为准
	BizId string `json:"bizId,omitempty"`
	// <ext>core:true</ext> 【本地路径/网络路径】本地路径/网络路径 【作用】 通过本地路径或网络路径获取文件进行上传，文件上传后系统将自动将文档转换为PDF格式，方便后续进行签署 【传参】 1、支持的文件格式：pdf，doc，docx，wps，rtf，png，gif，jpg，jpeg，tiff，xls，xlsx，txt，ofd，dwg。 2、若上传CAD图纸（dwg格式），请先开启电子签章管理后台【自定义配置DWG_SWITCH】。 3、上传为PDF时，PDF的版本需要>1.3。 4、上传签署文档大小限制可在电子签章管理后台【电子用印设置-文件上传限制】进行配置。 5、url（本地路径/网络路径）和ftpUrl（ftp存储路径）必传其一，均传入以url（本地路径/网络路径）为准。 【特殊说明】 若电子签章管理后台配置签署文件仅允许上传指定格式文件，则此参数对应仅允许传入限定格式的本地文件
	Url string `json:"url,omitempty"`
	// <ext>core:true;inner-type:Json<FtpRequest></ext> 【ftp存储路径】ftp存储路径 【作用】 通过ftp存储路径获取已存储文档，来创建签署文档 【传参方式】 json字符串传 【特殊说明】 1、与““本地路径/网络路径”选择一个传参即可，都传值时，取值优先级：“本地路径/网络路径”>ftp存储路径 2、若电子签章管理后台配置签署文件仅允许上传指定格式文件，则此参数对应仅允许传入限定格式的本地文件
	FtpUrl string `json:"ftpUrl,omitempty"`
	// <ext>core:true</ext> 【签署文档名称】签署文档名称 【作用】 用于传入上传的签署文档的名称
	Title string `json:"title"`
	// <ext>inner-type:Json<WaterMarkContent[]></ext> 【文件水印】文件水印 【作用】 1、可在签署文档上添加水印，允许传入多组水印 2、若新增的文件已添加数字签名，因添加文件水印会篡改文件导致数字签名失效，故文件水印不会生效
	WaterMarks string `json:"waterMarks,omitempty"`
	// <ext>inner-type:Json<StampWaterMarkContent[]></ext> 【印章水印】印章水印 【作用】 1、可在印章外观上添加水印，防止签署文件上的印章被抠章后二次使用，允许传入多组水印 2、印章水印将会与该签署文档绑定，后续在这份文档上进行签章时，会对应给章面增加水印
	StampWaterMarks string `json:"stampWaterMarks,omitempty"`
	// 【加密pdf文件的查看密码】加密pdf文件的查看密码 【作用】 若文件被加密导致无法上传签署，可传入编辑密码，系统将自动解密文件，文件可正常上传 【特殊说明】 已有签名且有编辑密码的文件，若解密后原有文件签名将会失效
	OpenPassword string `json:"openPassword,omitempty"`
	// 【加密pdf文件的编辑密码】加密pdf文件的编辑密码 【作用】 若文件被加密导致无法上传签署，可传入编辑密码，系统将自动解密文件，文件可正常上传 【特殊说明】 已有签名且有编辑密码的文件，若解密后原有文件签名将会失效
	EditPassword string `json:"editPassword,omitempty"`
	// 【对文档加密限制文档编辑】对文档加密限制文档编辑 【作用】 1. 可选择对文档添加编辑口令进行加密，该文档进行签署后，可防止用户进行抠章或编辑操作，下载到本地也不能进行编辑或导出为Word 2. 仅在Office、WPS、福昕、adobe系列软件中才可限制不允许编辑，其余软件因产品自身功能规则不同，可能无法限制编辑 3. 已有数字签名的文件上传时不支持加密（加密将影响签名有效性） 4. 若后续需要获取文档的编辑口令，可调用<docs>/contract/getDocumentPassword</docs> 【传参】 取值范围：true（加密），false（不加密）；不传值默认为：false（不加密）。
	IsPassword            *bool                                   `json:"isPassword,omitempty"`
	FtpUrlObject          *common.FtpRequest                      `json:"ftpUrlObject,omitempty"`
	StampWaterMarksObject []*common.DocumentStampWaterMarkContent `json:"stampWaterMarksObject,omitempty"`
	WaterMarksObject      []*common.DocumentWaterMarkContent      `json:"waterMarksObject,omitempty"`
}

func (obj DocumentAddbyurlRequest) GetUrl() string {
	return "/document/addbyurl"
}

func (obj DocumentAddbyurlRequest) GetHttpParameter() *http.HttpParameter {
	parameter := http.NewPostHttpParameter()
	parameter.AddParam("contractId", obj.ContractId)
	parameter.AddParam("bizId", obj.BizId)
	parameter.AddParam("url", obj.Url)
	parameter.AddParam("title", obj.Title)
	parameter.AddParam("openPassword", obj.OpenPassword)
	parameter.AddParam("editPassword", obj.EditPassword)
	parameter.AddParam("isPassword", obj.IsPassword)
	if obj.FtpUrlObject != nil {
		jsonBytes, _ := json.Marshal(obj.FtpUrlObject)
		parameter.AddParam("ftpUrl", string(jsonBytes))
	} else {
		parameter.AddParam("ftpUrl", obj.FtpUrl)
	}
	if obj.StampWaterMarksObject != nil {
		jsonBytes, _ := json.Marshal(obj.StampWaterMarksObject)
		parameter.AddParam("stampWaterMarks", string(jsonBytes))
	} else {
		parameter.AddParam("stampWaterMarks", obj.StampWaterMarks)
	}
	if obj.WaterMarksObject != nil {
		jsonBytes, _ := json.Marshal(obj.WaterMarksObject)
		parameter.AddParam("waterMarks", string(jsonBytes))
	} else {
		parameter.AddParam("waterMarks", obj.WaterMarks)
	}
	return parameter
}
