package cn.iocoder.hake.module.agent.controller.admin.agent.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;

import java.time.LocalDate;
import javax.validation.constraints.*;

@Schema(description = "管理后台 - 代理商管理新增/修改 Request VO")
@Data
public class AgentSaveReqVO {

    @Schema(description = "代理商唯一标识（自增ID，建议用雪花算法确保分布式系统唯一性）", requiredMode = Schema.RequiredMode.REQUIRED, example = "16582")
    private Long id;

    @Schema(description = "代理商登陆名", requiredMode = Schema.RequiredMode.REQUIRED, example = "哈客")
    @NotEmpty(message = "代理商登陆名不能为空")
    private String agentName;

    @Schema(description = "代理商编码（系统自动生成，格式如 AGT+日期+序号，用于业务标识）", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotEmpty(message = "代理商编码（系统自动生成，格式如AGT+日期+序号，用于业务标识）不能为空")
    private String agentCode;

    @Schema(description = "代理商全称（需与营业执照一致）", example = "哈客")
    private String agentNickname;

    @Schema(description = "代理商简称（用于日常展示）", example = "李四")
    private String agentShortNickname;

    @Schema(description = "审核状态（枚举：0-禁用;1-未认证；2-待审核；3-审核中；4-审核驳回；05-启用；）", example = "2")
    private Integer status;

    @Schema(description = "是否允许发展下级代理：0-否；1-是")
    private Integer childAgentFlag;

    @Schema(description = "是否允许发展下级商户：0-否；1-是")
    private Integer childMchFlag;

    @Schema(description = "是否发送开通提醒：0-否；1-是")
    private Integer informFlag;

    @Schema(description = "代理商类型（枚举：1-个人代理；2-企业代理）", example = "2")
    private Integer agentType;

    @Schema(description = "代理商等级（枚举：1-一级；2-二级）")
    private Integer agentLevel;

    @Schema(description = "上级代理商ID（自关联agent_id，用于多级代理体系，无上级则为空）", example = "29314")
    private Long parentAgentId;

    @Schema(description = "主要联系人（日常对接人）")
    private String contactPerson;

    @Schema(description = "联系电话（必填，用于系统通知和业务沟通）")
    private String contactPhone;

    @Schema(description = "联系邮箱（用于合同发送、对账通知等）")
    private String contactEmail;

    @Schema(description = "联系人或法人身份证人像面照片的URL路径")
    private String cardFrontPhoto;

    @Schema(description = "联系人或法人身份证国徽面照片的URL路径；与上一字段关联，需同时上传")
    private String cardReversePhoto;

    @Schema(description = "联系人或法人手持承诺函照片的URL路径")
    private String commitmentPhoto;

    @Schema(description = "营业执照照片的URL路径")
    private String businessLicensePhoto;

    @Schema(description = "开户许可证照片的URL路径")
    private String bankAccountPermit;

    @Schema(description = "合作状态（枚举：0-待合作；1-合作中；2-暂停合作；3-终止合作）", example = "2")
    private Integer cooperationStatus;

    @Schema(description = "收款账户类型（枚举：1 - 银行卡；2 - 支付宝；3 - 微信支付）", example = "1")
    private Integer receiveAccountType;

    @Schema(description = "账户姓名（需与证件姓名一致，用于收款账户实名校验）", example = "赵六")
    private String accountName;

    @Schema(description = "支付宝账号（当receive_account_type=2时必填，格式为手机号或邮箱）", example = "1677")
    private String alipayAccount;

    @Schema(description = "开户银行名称（当receive_account_type=1时必填，如 中国工商银行）", example = "赵六")
    private String bankName;

    @Schema(description = "收款账号（银行卡号或对公账户号，当receive_account_type=1时必填）", example = "13854")
    private String bankAccount;

    @Schema(description = "开户行支行名称（当receive_account_type=1时必填，如 北京朝阳支行）")
    private String bankBranch;

    @Schema(description = "这是审核备注信息")
    private String auditRemark;

    @Schema(description = "签约日期（合同签订时间）")
    private LocalDate signDate;



}