package cn.iocoder.yudao.module.asset.controller.admin.vehicle.vo;

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

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

@Schema(description = "管理后台 - 车辆 Response VO")
@Data
public class VehicleRespVO {

    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    private Long id;

    // ==================== 基础信息 ====================
    @Schema(description = "车牌号", requiredMode = Schema.RequiredMode.REQUIRED, example = "沪A12345")
    private String plateNo;

    @Schema(description = "车辆编号", example = "VEH000001")
    private String vehicleNo;

    @Schema(description = "车辆识别代号（VIN）", example = "LGWEF4A59NS123456")
    private String vin;

    @Schema(description = "车型ID", example = "1")
    private Long vehicleModelId;

    @Schema(description = "运营省份", example = "广东省")
    private String regionProvince;

    @Schema(description = "运营城市", example = "广州市")
    private String regionCity;

    @Schema(description = "发动机号", example = "ENG12345678")
    private String engineNo;

    @Schema(description = "行驶证注册日期", example = "2023-07-01")
    private LocalDate registerDate;

    @Schema(description = "采购日期", example = "2023-06-15")
    private LocalDate purchaseDate;

    @Schema(description = "采购价格", example = "150000.00")
    private BigDecimal purchasePrice;

    @Schema(description = "车身颜色", example = "白色")
    private String color;

    @Schema(description = "出厂年份", example = "2023")
    private String year;

    @Schema(description = "行驶里程（公里）", example = "12580")
    private Integer mileage;

    @Schema(description = "行驶证检验有效期", example = "2025-07")
    private String inspectExpire;

    @Schema(description = "强制报废期", example = "2038-12-31")
    private LocalDate scrapDate;

    // ==================== 位置信息 ====================
    @Schema(description = "停车场ID", example = "1")
    private Long parkingId;

    @Schema(description = "停车场名称", example = "天河停车场")
    private String parkingName;

    @Schema(description = "停车位", example = "A1-001")
    private String parkingSpace;

    @Schema(description = "GPS详细地址", example = "广东省广州市天河区天河路100号")
    private String location;

    @Schema(description = "纬度", example = "23.123456")
    private BigDecimal latitude;

    @Schema(description = "经度", example = "113.123456")
    private BigDecimal longitude;

    @Schema(description = "GPS最后上传时间", example = "2024-02-12 14:30:00")
    private LocalDateTime gpsTime;

    @Schema(description = "入场时间", example = "2024-02-01 10:00:00")
    private LocalDateTime entryTime;

    @Schema(description = "出场时间", example = "2024-02-10 18:00:00")
    private LocalDateTime exitTime;

    // ==================== 业务信息 ====================
    @Schema(description = "客户ID", example = "1")
    private Long customerId;

    @Schema(description = "业务部门ID", example = "1")
    private Long departmentId;

    @Schema(description = "业务负责人ID", example = "1")
    private Long managerId;

    @Schema(description = "合同ID", example = "1")
    private Long contractId;

    @Schema(description = "登记所有权", example = "某某租赁公司")
    private String ownership;

    @Schema(description = "交车日期", example = "2024-01-10")
    private LocalDate deliveryDate;

    @Schema(description = "还车日期", example = "2024-02-01")
    private LocalDate returnDate;

    @Schema(description = "月租金", example = "3000.00")
    private BigDecimal monthlyRent;

    @Schema(description = "押金", example = "10000.00")
    private BigDecimal deposit;

    // ==================== 状态信息 ====================
    @Schema(description = "车辆状态", example = "0")
    private Integer status;

    @Schema(description = "运营状态", example = "2")
    private Integer operateStatus;

    @Schema(description = "库位状态", example = "5")
    private Integer storageStatus;

    @Schema(description = "出库状态", example = "4")
    private Integer outStatus;

    @Schema(description = "预占状态", example = "0")
    private Integer preemptStatus;

    @Schema(description = "整备状态", example = "3")
    private Integer prepareStatus;

    @Schema(description = "过户状态", example = "0")
    private Integer transferStatus;

    @Schema(description = "维修状态", example = "0")
    private Integer repairStatus;

    @Schema(description = "证照状态", example = "0")
    private Integer licenseStatus;

    @Schema(description = "报废状态", example = "0")
    private Integer scrapStatus;

    @Schema(description = "在线状态", example = "1")
    private Integer onlineStatus;

    @Schema(description = "是否已备车", example = "true")
    private Boolean isPrepared;

    @Schema(description = "是否已交车", example = "true")
    private Boolean isDelivered;

    @Schema(description = "是否已还车", example = "false")
    private Boolean isReturned;

    @Schema(description = "上次保养日期", example = "2024-01-15")
    private LocalDate lastMaintainDate;

    @Schema(description = "下次保养日期", example = "2024-07-15")
    private LocalDate nextMaintainDate;

    @Schema(description = "上次年检日期", example = "2024-01-01")
    private LocalDate lastInspectDate;

    @Schema(description = "下次年检日期", example = "2026-01-01")
    private LocalDate nextInspectDate;

    @Schema(description = "保险到期日期", example = "2025-12-31")
    private LocalDate insuranceExpireDate;

    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
    private LocalDateTime createTime;

}
