using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tea;

namespace LifePayment.Domain.Shared;

public class AliPayEcsignInterfaceBaseOutput : TeaModel
{
    /// <summary>
    /// 业务码,10000表示成功
    /// </summary>
    [NameInMap("code")]
    public string Code { get; set; }

    /// <summary>
    /// 异常信息
    /// </summary>
    [NameInMap("sub_msg")]
    public string SubMsg { get; set; }

    // public bool IsSuccess() => Code == AliPayEcsignConstant.SuccessCode;
}

public class SealSaveOutput : AliPayEcsignInterfaceBaseOutput
{
    /// <summary>
    /// 印章ID
    /// </summary>
    [NameInMap("seal_id")]
    public string SealId { get; set; }
}


public class SealBatchQueryOutput : AliPayEcsignInterfaceBaseOutput
{
    /// <summary>
    /// 页数,默认1,必须大于0
    /// </summary>
    [NameInMap("page_no")]
    public int PageNo { get; set; } = 1;

    /// <summary>
    /// 页面大小,默认200
    /// </summary>
    [NameInMap("page_size")]
    public int PageSize { get; set; } = 200;

    /// <summary>
    /// 总数
    /// </summary>
    [NameInMap("total_count")]
    public int TotalCount { get; set; }

    /// <summary>
    /// 印章列表
    /// </summary>
    [NameInMap("seal_list")]
    public List<SealInfo> SealList { get; set; } = new List<SealInfo>();
}

// 子类用于印章信息
public class SealInfo : TeaModel
{
    /// <summary>
    /// 印章ID
    /// </summary>
    [NameInMap("seal_id")]
    public string SealId { get; set; }

    /// <summary>
    /// 印章名称
    /// </summary>
    [NameInMap("seal_name")]
    public string SealName { get; set; }

    /// <summary>
    /// 印章类型
    /// </summary>
    [NameInMap("seal_type")]
    public string SealType { get; set; }

    /// <summary>
    /// 印章状态,INIT-初始化,NORMAL-正常可用,APPROVING-授权中,CANCEL-失效不可用
    /// </summary>
    [NameInMap("seal_status")]
    public string SealStatus { get; set; }

    /// <summary>
    /// 印章预览链接
    /// </summary>
    [NameInMap("preview_url")]
    public string PreviewUrl { get; set; }

    /// <summary>
    /// 企业名称
    /// </summary>
    [NameInMap("enterprise_name")]
    public string EnterpriseName { get; set; }

    /// <summary>
    /// 统一社会信用代码
    /// </summary>
    [NameInMap("enterprise_cert_no")]
    public string EnterpriseCertNo { get; set; }

    /// <summary>
    /// 创建时间
    /// </summary>
    [NameInMap("gmt_create")]
    public DateTime GmtCreate { get; set; }

    /// <summary>
    /// æ›´æ–°æ—¶é—´
    /// </summary>
    [NameInMap("gmt_modified")]
    public DateTime GmtModified { get; set; }
}

public class SealAuthOutput : AliPayEcsignInterfaceBaseOutput
{
    /// <summary>
    /// 授权调整链接,将链接给到对应企业,让其进行签约授权
    /// </summary>
    [NameInMap("auth_jump_url")]
    public string AuthJumpUrl { get; set; }
}


public class FileUploadOutput : AliPayEcsignInterfaceBaseOutput
{
    /// <summary>
    /// 文件ID
    /// </summary>
    [NameInMap("file_id")]
    public string FileId { get; set; }
}

public class TemplateSaveOutput : AliPayEcsignInterfaceBaseOutput
{
    /// <summary>
    /// 合同模板ID,后续用于配置签约方案
    /// </summary>
    [NameInMap("template_id")]
    public string TemplateId { get; set; }
}

// 继承自基类的具体输出类
public class TemplateBatchQueryOutput : AliPayEcsignInterfaceBaseOutput
{
    /// <summary>
    /// 数据列表
    /// </summary>
    [NameInMap("data_list")]
    public List<TemplateInfo> DataList { get; set; } = new List<TemplateInfo>();
}

// 子类用于合同模板信息
public class TemplateInfo : TeaModel
{
    /// <summary>
    /// 合同模板ID
    /// </summary>
    [NameInMap("template_id")]
    public string TemplateId { get; set; }

    /// <summary>
    /// 合同模板名称
    /// </summary>
    [NameInMap("template_name")]
    public string TemplateName { get; set; }

    /// <summary>
    /// 合同模板描述
    /// </summary>
    [NameInMap("template_memo")]
    public string TemplateMemo { get; set; }

    /// <summary>
    /// 合同模板类型
    /// </summary>
    [NameInMap("template_type")]
    public string TemplateType { get; set; }
}

// 继承自基类的具体输出类
public class TemplateQueryOutput : AliPayEcsignInterfaceBaseOutput
{
    /// <summary>
    /// 数据列表
    /// </summary>
    [NameInMap("contract_template_open_vo")]
    public List<ContractTemplateOpenVo> ContractTemplateOpenVoList { get; set; } = new List<ContractTemplateOpenVo>();
}

// 子类用于合同模板信息
public class ContractTemplateOpenVo : TeaModel
{
    /// <summary>
    /// 合同模板ID
    /// </summary>
    [NameInMap("template_id")]
    public string TemplateId { get; set; }

    /// <summary>
    /// 合同模板名称
    /// </summary>
    [NameInMap("template_name")]
    public string TemplateName { get; set; }

    /// <summary>
    /// 合同模板描述
    /// </summary>
    [NameInMap("template_memo")]
    public string TemplateMemo { get; set; }

    /// <summary>
    /// 合同模板类型
    /// </summary>
    [NameInMap("template_type")]
    public string TemplateType { get; set; }

    /// <summary>
    /// 合同文件预览链接
    /// </summary>
    [NameInMap("preview_url")]
    public string PreviewUrl { get; set; }

    /// <summary>
    /// 企业印章控件列表
    /// </summary>
    [NameInMap("corporate_seal_rects")]
    public List<RectItem> CorporateSealRects { get; set; } = new List<RectItem>();

    /// <summary>
    /// 个人印章控件列表
    /// </summary>
    [NameInMap("personal_seal_rects")]
    public List<PersonalSealRectItem> PersonalSealRects { get; set; } = new List<PersonalSealRectItem>();

    /// <summary>
    /// 时间戳控件列表
    /// </summary>
    [NameInMap("time_stamp_rects")]
    public List<TimeStampRectItem> TimeStampRects { get; set; } = new List<TimeStampRectItem>();

    /// <summary>
    /// 单行文本框控件列表
    /// </summary>
    [NameInMap("singleline_text_rects")]
    public List<TextRectItem> SinglelineTextRects { get; set; } = new List<TextRectItem>();

    /// <summary>
    /// 多行文本框控件列表
    /// </summary>
    [NameInMap("multiline_text_rects")]
    public List<TextRectItem> MultilineTextRects { get; set; } = new List<TextRectItem>();
}

public class SolutionSaveOutput : AliPayEcsignInterfaceBaseOutput
{
    /// <summary>
    /// 签约方案编码
    /// </summary>
    [NameInMap("solution_code")]
    public string SolutionCode { get; set; }
}

public class SolutionBatchQueryOutput : AliPayEcsignInterfaceBaseOutput
{
    /// <summary>
    /// 页数,默认1,必须大于0
    /// </summary>
    [NameInMap("page_no")]
    public int PageNo { get; set; } = 1;

    /// <summary>
    /// 页面大小,默认200
    /// </summary>
    [NameInMap("page_size")]
    public int PageSize { get; set; } = 200;

    /// <summary>
    /// 总数
    /// </summary>
    [NameInMap("total_count")]
    public int TotalCount { get; set; }

    /// <summary>
    /// 签约方案编码列表
    /// </summary>
    [NameInMap("solution_list")]
    public List<SolutionInfo> SolutionList { get; set; } = new List<SolutionInfo>();
}

// 子类用于签约方案信息
public class SolutionInfo : TeaModel
{
    /// <summary>
    /// 签约方案名称
    /// </summary>
    [NameInMap("solution_name")]
    public string SolutionName { get; set; }

    /// <summary>
    /// 签约方案编码
    /// </summary>
    [NameInMap("solution_code")]
    public string SolutionCode { get; set; }

    /// <summary>
    /// 创建时间
    /// </summary>
    [NameInMap("gmt_create")]
    public DateTime GmtCreate { get; set; }

    /// <summary>
    /// æ›´æ–°æ—¶é—´
    /// </summary>
    [NameInMap("gmt_modified")]
    public DateTime GmtModified { get; set; }
}

public class SolutionQueryOutput : AliPayEcsignInterfaceBaseOutput
{
    /// <summary>
    /// 签名方案对象
    /// </summary>
    [NameInMap("solution_vo")]
    public SolutionVo SolutionVo { get; set; }


}

// 子类用于签名方案信息
public class SolutionVo : TeaModel
{
    /// <summary>
    /// 签约方案编码
    /// </summary>
    [NameInMap("solution_code")]
    public string SolutionCode { get; set; }

    /// <summary>
    /// 签约方案名称
    /// </summary>
    [NameInMap("solution_name")]
    public string SolutionName { get; set; }

    /// <summary>
    /// 创建时间
    /// </summary>
    [NameInMap("gmt_create")]
    public DateTime GmtCreate { get; set; }

    /// <summary>
    /// æ›´æ–°æ—¶é—´
    /// </summary>
    [NameInMap("gmt_modified")]
    public DateTime GmtModified { get; set; }

    /// <summary>
    /// 模板列表
    /// </summary>
    [NameInMap("template_list")]
    public List<SolutionTemplateInfo> TemplateList { get; set; } = new List<SolutionTemplateInfo>();

    /// <summary>
    /// 其他属性
    /// </summary>
    [NameInMap("attribute_vo_list")]
    public List<SolutionAttributeVo> AttributeVoList { get; set; } = new List<SolutionAttributeVo>();
}

// 子类用于模板信息
public class SolutionTemplateInfo : TeaModel
{
    /// <summary>
    /// 模板ID
    /// </summary>
    [NameInMap("template_id")]
    public string TemplateId { get; set; }

    /// <summary>
    /// 模板名称
    /// </summary>
    [NameInMap("template_name")]
    public string TemplateName { get; set; }

    /// <summary>
    /// 模板类型
    /// </summary>
    [NameInMap("template_type")]
    public string TemplateType { get; set; }

    /// <summary>
    /// 合同是否必读,默认false
    /// </summary>
    [NameInMap("must_read")]
    public bool MustRead { get; set; } = false;
}

// 子类用于其他属性信息
public class SolutionAttributeVo : TeaModel
{
    /// <summary>
    /// 签约方式
    /// </summary>
    [NameInMap("access_config_code")]
    public string AccessConfigCode { get; set; }

    /// <summary>
    /// 核身方式
    /// </summary>
    [NameInMap("verify_code")]
    public string VerifyCode { get; set; }
}

public class DataprepareCreateOutput : AliPayEcsignInterfaceBaseOutput
{
    /// <summary>
    /// 签约长链接
    /// </summary>
    [NameInMap("jump_url")]
    public string JumpUrl { get; set; }

    /// <summary>
    /// 扩展信息字符串
    /// </summary>
    [NameInMap("ext_info")]
    public string ExtInfoStr { get; set; }

    /// <summary>
    /// 扩展信息对象
    /// </summary>
    public DataprepareCreateExtInfo ExtInfo { get; set; }
}

// 子类用于扩展信息
public class DataprepareCreateExtInfo : TeaModel
{
    /// <summary>
    /// 签约密钥,用于跳转H5页面或者唤起支付宝签约插件使用
    /// </summary>
    [NameInMap("contextParams")]
    [JsonProperty("contextParams")]
    public string ContextParams { get; set; }

    /// <summary>
    /// 签约短链接
    /// </summary>
    [NameInMap("shortUrl")]
    [JsonProperty("shortUrl")]
    public string ShortUrl { get; set; }
}

public class SignorderQueryOutput : AliPayEcsignInterfaceBaseOutput
{
    /// <summary>
    /// 签约订单号
    /// </summary>
    [NameInMap("sign_order_no")]
    public string SignOrderNo { get; set; }

    /// <summary>
    /// 订单状态:INIT-初始化,FAIL-签约失败,SUCCESS-签约成功
    /// </summary>
    [NameInMap("order_status")]
    public string OrderStatus { get; set; }

    /// <summary>
    /// 签约方案码
    /// </summary>
    [NameInMap("solution_code")]
    public string SolutionCode { get; set; }

    /// <summary>
    /// 创建时间
    /// </summary>
    [NameInMap("gmt_create")]
    public DateTime GmtCreate { get; set; }

    /// <summary>
    /// æ›´æ–°æ—¶é—´
    /// </summary>
    [NameInMap("gmt_modified")]
    public DateTime GmtModified { get; set; }

    /// <summary>
    /// 扩展信息json
    /// </summary>
    [NameInMap("ext_info")]
    public string  ExtInfoStr { get; set; }

    /// <summary>
    /// 扩展信息对象
    /// </summary>
    public SignorderQueryExtInfo ExtInfo { get; set; }
}

public class SignorderQueryExtInfo : TeaModel
{
    /// <summary>
    /// 合同文件列表
    /// </summary>
    [NameInMap("fileList")]
    public List<FileDetail> FileList { get; set; } = new List<FileDetail>();
}

// 子类用于合同文件详情
public class FileDetail : TeaModel
{
    /// <summary>
    /// 合同文件名称
    /// </summary>
    [NameInMap("fileName")]
    public string FileName { get; set; }

    /// <summary>
    /// 合同预览链接
    /// </summary>
    [NameInMap("previewUrl")]
    public string PreviewUrl { get; set; }
}