package com.hotwj.platform.resourceManagement.company.domain.bo;

import com.hotwj.platform.resourceManagement.company.domain.SysCompany;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;

/**
 * 企业基本信息业务对象 sys_company
 *
 * @author shihongwei
 * @date 2025-12-02
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysCompany.class, reverseConvertGenerate = false)
public class SysCompanyBo extends BaseEntity {

    /**
     *
     */
    @NotNull(message = "不能为空", groups = {EditGroup.class})
    private Long id;

    /**
     * 上级代理商id
     */
    private Long agentId;

    /**
     * 代理商业务员id
     */
    private Long salesmanId;

    /**
     * 企业名称
     */
    @NotBlank(message = "企业名称不能为空", groups = {AddGroup.class, EditGroup.class})
    private String companyName;

    /**
     * 企业简称
     */
    private String companyShortName;

    /**
     * 企业类型（下拉选项值或字典编码）
     */
    @NotBlank(message = "企业类型不能为空", groups = {AddGroup.class, EditGroup.class})
    private String companyType;

    /**
     * 所属行业（下拉选项值或字典编码）
     */
    @NotBlank(message = "所属行业不能为空", groups = {AddGroup.class, EditGroup.class})
    private String industry;

    /**
     * 法人姓名
     */
    @NotBlank(message = "法人姓名不能为空", groups = {AddGroup.class, EditGroup.class})
    private String legalPersonName;

    /**
     * 法人手机号
     */
    @NotBlank(message = "法人手机号不能为空", groups = {AddGroup.class, EditGroup.class})
    private String legalPersonPhone;

    /**
     * 负责人姓名
     */
    @NotBlank(message = "负责人姓名不能为空", groups = {AddGroup.class, EditGroup.class})
    private String responsibleName;

    /**
     * 负责人手机号
     */
    @NotBlank(message = "负责人手机号不能为空", groups = {AddGroup.class, EditGroup.class})
    private String responsibleMobile;

    /**
     * 注册地址
     */
    @NotBlank(message = "注册地址不能为空", groups = {AddGroup.class, EditGroup.class})
    private String registeredAddress;

    /**
     * 办公地址
     */
    @NotBlank(message = "办公地址不能为空", groups = {AddGroup.class, EditGroup.class})
    private String officeAddress;

    /**
     * 办公电话
     */
    private String officePhone;

    /**
     * 电子公章文件URL（或OSS地址）
     */
    private String sealUrl;

    /**
     * 省份代码
     */
    private String provinceCode;

    /**
     * 城市代码
     */
    private String cityCode;

    /**
     * 行政区划代码
     */
    @NotBlank(message = "行政区划代码不能为空", groups = {AddGroup.class, EditGroup.class})
    private String regionCode;

    /**
     * 其他附件（逗号分隔）
     */
    private String otherAttachments;

    /**
     * 统一社会信用代码
     */
    @NotBlank(message = "统一社会信用代码不能为空", groups = {AddGroup.class, EditGroup.class})
    private String creditCode;

    /**
     * 成立日期
     */
    @NotNull(message = "成立日期不能为空", groups = {AddGroup.class, EditGroup.class})
    private LocalDate establishDate;

    /**
     * 注册资本（万元）
     */
    private BigDecimal registeredCapital;

    /**
     * 经营期限
     */
    private LocalDate businessTerm;

    /**
     * 是否长期经营
     */
    private Boolean businessLongTerm;

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

    /**
     * 营业执照图片URL（或OSS地址）
     */
    private String businessLicenseImage;

    /**
     * 道路经营许可证号
     */
    private String roadPermitNumber;

    /**
     * 道路经营许可证过期日期
     */
    private LocalDate roadExpireDate;

    /**
     * 道路许可证经营范围
     */
    private String roadBusinessScope;

    /**
     * 道路经营许可证文件URL（或OSS地址） 多个
     */
    private String roadPermitFiles;

    // 其他字段

    /**
     * 状态：1=正常 0=禁用
     */
    @NotNull(message = "状态：1=正常 0=禁用不能为空", groups = {EditGroup.class})
    private Long status;

    /**
     * 0=正常, 1=已删除
     */
    @NotNull(message = "0=正常, 1=已删除不能为空", groups = {EditGroup.class})
    private Long isDeleted;

    /**
     * 驾驶员邀请码
     */
    private String driverInvitationCode;

    /**
     * 驾驶员邀请码过期时间
     */
    private java.time.LocalDateTime driverInvitationCodeExpireTime;

    /**
     * 驾驶员邀请码二维码URL
     */
    private String driverInvitationQrCodeUrl;

    // -- 其他子表

    /**
     * 公司银行账号
     */
    private List<HotCompanyBankAccountBo> bankAccounts;

    /**
     * 公司第三方平台账号
     */
    private List<HotCompanyThirdPlatformBo> thirdPlatforms;

}
