package com.nbport.zgwl.partner.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

/**
 * 相对方主对象
 *
 * 字段命名直接采用 ILDM_FEE_CUSTOMER_INFO 的驼峰写法，
 * 避免再维护一套“业务语义字段”和“数据库字段”的双重命名。
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PartnerManageDto implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    // ============== 客户基本信息字段 ==============

    /** 客户系统ID */
    private Long customerSysid;  // 注意：数据库中是VARCHAR(64)，不是Long

    /** 客户注册号 */
    private String customerRegno;

    /** 客户编号 */
    private String customerNo;

    /** 公司全称 */
    private String customerNameC;

    /** 公司英文名称 */
    private String customerNameEn;

    /** 公司简称 */
    private String customerShortName;

    /** 公司英文简称 */
    private String customerShortNameEn;

    /** 统一社会信用代码 */
    private String customerTaxno;

    /** 详细地址 */
    private String customerAddress;

    /** 联系电话 */
    private String officephone;

    /** 开户银行 */
    private String customerBank;

    /** 银行账户 */
    private String customerBankaccount;

    /** 客户性质 */
    private String customerCharacter;

    /** 注册地址 */
    private String customerRegaddr;

    /** 注册日期 */
    private LocalDate customerRegdate;

    /** 客户性质分类 */
    private String customerNature;

    /** 邮编 */
    private String customerZip;

    /** 客户类型标识1 */
    private String customer1Typeflag;

    /** 客户类型标识2 */
    private String customer2Typeflag;

    /** 客户类型标识3 */
    private String customer3Typeflag;

    /** 客户类型标识4 */
    private String customer4Typeflag;

    /** 境内外 */
    private String placeType;

    /** 启用标识 */
    private String activeflag;

    /** 海铁系统客户ID */
    private String customerSysidHt;

    /** 下载日期 */
    private LocalDate downDate;

    /** 开户标识 */
    private String openFlag;

    /** 业务系统类型（ht:海铁联运系统;xg:箱管系统;qc:全程物流） */
    private String systemType;

    /** 组织体系对应的公司编码 */
    private Long orgId;

    /** 邮箱地址 */
    private String emailAddress;

    // ============== 法务系统相关字段 ==============

    /** 法务系统相对方ID（唯一标识） */
    private String oppositeId;

    /** 相对方性质分类（1:境内组织,2:境内个人,3:境外组织,4:境外个人） */
    private String oppositeCharacter;

    /** 是否涉港澳台标识（Y:是,N:否，法务业务分类用） */
    private String gatFlag;

    /** 是否集团内（Y:是,N:否，法务业务分类用） */
    private String groupFlag;

    /** 国家编码 */
    private String country;

    /** 国家名称 */
    private String countryName;

    /** 城市 */
    private String city;

    /** 邮编 */
    private String postcode;

    /** 法定代表人或负责人ID */
    private String legalPersonId;

    /** 法定代表人或负责人姓名 */
    private String legalPersonName;

    /** 法定代表人或负责人账户 */
    private String legalPersonAccount;

    /** 法定代表人身份证号（加密存储） */
    private String legalPersonCardId;

    /** 网站地址 */
    private String website;

    /** 自然人证件类型（idCard:身份证,passport:护照,other:其他） */
    private String certificateType;

    /** 自然人证件号码（加密存储） */
    private String certificateNum;

    /** TIN码（税务识别号） */
    private String tinCode;

    /** 境外公司活动证明编码 */
    private String abroadCode;

    /** 注册资金（单位：元） */
    private BigDecimal registeredCapital;

    /** 注册资本（文本描述，如：1000万人民币） */
    private String regCapital;

    /** 经营范围 */
    private String busScope;

    /** 相对方编码（业务分类编码） */
    private String oppositeCode;

    /** 状态（EFFECTUAL:有效,INVALID:无效） */
    private String oppositeStatus;

    /** 是否SGAT（1:是,0:否） */
    private String isSgat;

    /** 是否JTN（1:是,0:否） */
    private String isJtn;

    /** 组织性质（ZY:政府,QY:企业,QT:其他组织） */
    private String natureOfEnterpriseOrg;

    /** 组织性质子级（GNQY:国有企业,MYQY:民营企业,WZQY:外资企业,HZQY:合资企业,GYQZHKGQY:国有全资和控股企业,QT:其他） */
    private String natureOfEnterpriseOrgLev;

    /** 类型（client:客户,clientAndSup:客户及供应商,other:其他,Partner:合作伙伴,supplier:供应商） */
    private String relativeType;

    /** 法务系统删除标记（Y:是,N:否，逻辑删除） */
    private String isDeleted;

    /** 备注【法务】 */
    private String comments;

    /** 备注 */
    private String remark;

    // ============== 系统通用字段 ==============

    /** 创建人 */
    private String createBy;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime createTime;

    /** 更新人 */
    private String updateBy;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime updateTime;

    // ============== 同步状态字段 ==============

    /** 同步状态：unsynced/synced/failed */
    private String syncStatus;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime syncTime;

    /** 同步说明 */
    private String syncMessage;

    // ============== 非数据库字段 ==============

    /** 联系人列表 */
    @Builder.Default
    private List<PartnerContactDto> contacts = new ArrayList<>();
}