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

import com.hotwj.platform.resourceManagement.vehicleContract.domain.bo.HotVehicleContractBo;
import com.hotwj.platform.resourceManagement.vehicleDevice.domain.bo.HotVehicleDeviceBo;
import com.hotwj.platform.resourceManagement.vehicleInsurance.domain.bo.HotVehicleInsuranceBo;
import com.hotwj.platform.resourceManagement.vehicleManagement.domain.HotVehicle;
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.util.Date;
import java.util.List;

/**
 * 公司车辆信息业务对象 hot_vehicle
 *
 * @author shihongwei
 * @date 2025-12-15
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = HotVehicle.class, reverseConvertGenerate = false)
public class HotVehicleStatusBo extends BaseEntity {

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

    /**
     * 公司ID
     */
    @NotNull(message = "公司ID不能为空", groups = {AddGroup.class, EditGroup.class})
    private Long companyId;

    /**
     * GPS参数
     */
    private String gpsParams;

    /**
     * 是否挂车0=否, 1=是
     */
    private Long isTrailer;

    /**
     * 车辆状态 1=正常, 0=停用
     */
    private Long vehicleStatus;

    /**
     * 运营状态:1=正常,2=暂停,3=过户,4=报废
     * 逗号拼接
     */
    private String operationStatus;

    /**
     * 备注
     */
    private String remark;

    /**
     * 当前驾驶员(多个逗号分隔)
     */
    private String currentDriver;

    /**
     * 车身照片URL(多个逗号分隔)
     */
    private String bodyImageUrls;

    /**
     * 其它证附件URL(多个逗号分隔)
     */
    private String otherAttachmentUrls;

    /**
     * 车身颜色
     */
    private String color;

    /**
     * 出厂日期
     */
    private Date manufactureDate;

    /**
     * 燃料种类
     */
    private String fuelType;

    /**
     * 制造厂名称
     */
    private String manufacturerName;

    /**
     * 车牌颜色
     */
    private String plateColor;

    /**
     * 车辆登记日期
     */
    private Date vehicleRegisterDate;

    /**
     * 发动机排量(ml)
     */
    private Long engineDisplacementMl;

    /**
     * 轮胎数量
     */
    private Long tireCount;

    /**
     * 底盘型号
     */
    private String chassisModel;

    /**
     * 卫星定位装置
     */
    private String satellitePositioningDevice;

    /**
     * 变速器
     */
    private String transmission;

    /**
     * 缓速器
     */
    private String retarder;

    /**
     * 货箱内部容积(立方米)
     */
    private Long cargoInnerVolumeM3;

    /**
     * 排放标准
     */
    private String emissionStandard;

    /**
     * 电池类型
     */
    private String batteryType;

    /**
     * 承保座数
     */
    private Long insuredSeatCount;

    /**
     * 行车制动方式
     */
    private String serviceBrakeType;

    /**
     * 前轮制动器形式
     */
    private String frontBrakeType;

    /**
     * 后轮制动器形式
     */
    private String rearBrakeType;

    /**
     * 制动防抱死系统:0=无,1=有
     */
    private Long hasAbs;

    /**
     * 空调系统:0=无,1=有
     */
    private Long hasAirConditioning;

    /**
     * 三角木标记:0=无,1=有
     */
    private Long hasTriangleBlock;

    /**
     * 灭火器:0=无,1=有
     */
    private Long hasFireExtinguisher;

    /**
     * 故障警示牌:0=无,1=有
     */
    private Long hasBreakdownWarningSign;

    /**
     * 国产标记:0=否,1=是
     */
    private Long domesticMark;

    /**
     * 车辆分类
     */
    private String vehicleCategory;

    /**
     * 强制报废期止
     */
    @NotNull(message = "强制报废期止不能为空", groups = {AddGroup.class, EditGroup.class})
    private Date mandatoryScrapEndDate;

    /**
     * 使用性质
     */
    private String useNature;

    /**
     * 车辆型号
     */
    private String vehicleModel;

    /**
     * 车架号
     */
    private String frameNumber;

    /**
     * 货箱内部长(mm)
     */
    private Long cargoInnerLengthMm;

    /**
     * 货箱内部宽(mm)
     */
    private Long cargoInnerWidthMm;

    /**
     * 货箱内部高(mm)
     */
    private Long cargoInnerHeightMm;

    /**
     * 是否按揭:0=否,1=是
     */
    private Long isMortgaged;

    /**
     * 按揭公司
     */
    private String mortgageCompany;

    /**
     * 按揭联系人
     */
    private String mortgageContact;

    /**
     * 按揭联系人电话
     */
    private String mortgageContactPhone;

    /**
     * 发动机净功率(kW)
     */
    private Long enginePowerKw;

    /**
     * 电机功率(kW)
     */
    private Long motorPowerKw;

    /**
     * 驱动电机型号
     */
    private String engineNumber;

    /**
     * 轮胎规格
     */
    private String tireSpec;

    /**
     * 轴距(mm)
     */
    private Long wheelbaseMm;

    /**
     * 车轴数
     */
    private Long axleCount;

    /**
     * 登记证书图片URL(多个逗号分隔)
     */
    private String registerCertImageUrls;

    /**
     * 车牌号
     */
    @NotBlank(message = "车牌号不能为空", groups = {AddGroup.class, EditGroup.class})
    private String plateNumber;

    /**
     * 档案号
     */
    private String archiveNo;

    /**
     * 车辆类型
     */
    @NotBlank(message = "车辆类型不能为空", groups = {AddGroup.class, EditGroup.class})
    private String vehicleType;

    /**
     * 注册日期
     */
    private Date firstRegisterDate;

    /**
     * 发证日期
     */
    @NotNull(message = "发证日期不能为空", groups = {AddGroup.class, EditGroup.class})
    private Date certificateIssueDate;

    /**
     * 检验有效期(YYYY-MM)
     */
    @NotBlank(message = "检验有效期(YYYY-MM)不能为空", groups = {AddGroup.class, EditGroup.class})
    private String inspectionValidMonth;

    /**
     * 机动车所有人
     */
    private String owner;

    /**
     * 地址
     */
    private String address;

    /**
     * 品牌型号
     */
    private String brandModel;

    /**
     * 核定载人数
     */
    private Long ratedPassengerCount;

    /**
     * 总质量(kg)
     */
    private Long grossWeightKg;

    /**
     * 整备质量(kg)
     */
    private Long curbWeightKg;

    /**
     * 核定载质量(kg)
     */
    private Long ratedLoadKg;

    /**
     * 准牵引总质量(kg)
     */
    private Long towingMassKg;

    /**
     * 车辆外廓长度(mm)
     */
    private Long vehicleLengthMm;

    /**
     * 车辆外廓宽度(mm)
     */
    private Long vehicleWidthMm;

    /**
     * 车辆外廓高度(mm)
     */
    private Long vehicleHeightMm;

    /**
     * 行驶证主页图片URL
     */
    private String drivingLicenseMainUrls;

    /**
     * 行驶证副页图片URL
     */
    private String drivingLicenseAuxUrls;

    /**
     * 行驶证其他URL
     */
    private String drivingLicenseOtherUrl;

    /**
     * 运输证号
     */
    @NotBlank(message = "运输证号不能为空", groups = {AddGroup.class, EditGroup.class})
    private String transportLicenseNo;

    /**
     * 运输证注册日期
     */
    private Date transportRegisterDate;

    /**
     * 运输证发证日期
     */
    private Date transportIssueDate;

    /**
     * 运输证有效期(YYYY-MM)
     */
    @NotBlank(message = "运输证有效期(YYYY-MM)不能为空", groups = {AddGroup.class, EditGroup.class})
    private String transportValidMonth;

    /**
     * 运输证图片URL(多个逗号分隔)
     */
    private String transportLicenseUrls;

    // -- 子表数据
    /**
     * 车辆合同列表
     */
    private List<HotVehicleContractBo> vehicleContracts;

    /**
     * 车辆保险列表
     */
    private List<HotVehicleInsuranceBo> vehicleInsurances;

    /**
     * 车辆安全设备列表
     */
    private List<HotVehicleDeviceBo> vehicleDevices;
}
