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

type DocumentUploadofflinedocumentRequest struct {
	// <ext>core:true</ext> 【线下签署文档】线下签署文档 【传参】 1、支持的文件格式：doc，docx，xls，xlsx，txt，pdf，rtf，jpg，png，gif，tiff，jpeg，zip，rar。 2、上传签署文档大小限制可在【电子签章管理后台-电子用印设置-文件上传限制】进行配置。
	OfflineDocument *os.File `json:"offlineDocument"`
	// <ext>inner-type:Json<UploadofflinedocumentInfo>;core:true</ext> 【线下签署文档信息】线下签署文档信息
	DocumentInfo string `json:"documentInfo"`
	// <ext>inner-type:Json<ContractRequest>;core:true</ext> 【电子签约文件】电子签约文件 【作用】 查询需添加线下签署文档的电子签约文件 【传参】 电子签约文件id和第三方业务系统文件id必传其一，均传入以电子签约文件id为准。
	ContractRequest string `json:"contractRequest"`
	// <ext>inner-type:Json<NameUserInfoRequest>;core:true</ext> 【操作人】操作人 【作用】 可传入业务系统中进行添加附件的操作人，传入后将在电子签章前台的签署详情、审计中进行记录，方便后期追溯 【传参】 1、参数必传其一（除姓名外），传入多个参数时根据verificationRule（查询规则）判断。 2、若用户不存在或操作人未传时，日志将记录调用此接口的应用名称。
	UserRequest           string                            `json:"userRequest,omitempty"`
	ContractRequestObject *common.ContractRequest           `json:"contractRequestObject,omitempty"`
	DocumentInfoObject    *common.UploadofflinedocumentInfo `json:"documentInfoObject,omitempty"`
	UserRequestObject     *common.NameUserInfoRequest       `json:"userRequestObject,omitempty"`
}

func (obj DocumentUploadofflinedocumentRequest) GetUrl() string {
	return "/document/uploadofflinedocument"
}

func (obj DocumentUploadofflinedocumentRequest) GetHttpParameter() *http.HttpParameter {
	parameter := http.NewPostHttpParameter()
	parameter.AddFiles("offlineDocument", obj.OfflineDocument)
	if obj.DocumentInfoObject != nil {
		jsonBytes, _ := json.Marshal(obj.DocumentInfoObject)
		parameter.AddParam("documentInfo", string(jsonBytes))
	} else {
		parameter.AddParam("documentInfo", obj.DocumentInfo)
	}
	if obj.UserRequestObject != nil {
		jsonBytes, _ := json.Marshal(obj.UserRequestObject)
		parameter.AddParam("userRequest", string(jsonBytes))
	} else {
		parameter.AddParam("userRequest", obj.UserRequest)
	}
	if obj.ContractRequestObject != nil {
		jsonBytes, _ := json.Marshal(obj.ContractRequestObject)
		parameter.AddParam("contractRequest", string(jsonBytes))
	} else {
		parameter.AddParam("contractRequest", obj.ContractRequest)
	}
	return parameter
}
