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

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

import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.NotBlank;
import java.math.BigDecimal;
import java.time.LocalDate;

/**
 * 车辆租赁合同 Base VO
 *
 * @author 芋道源码
 */
@Data
public class ContractBaseVO {

    @Schema(description = "合同编码（新增时自动生成）", example = "HT-2026-001")
    private String contractCode;

    @Schema(description = "合同类型（1=试用 2=正式）", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    @NotNull(message = "合同类型不能为空")
    private Integer contractType;

    @Schema(description = "项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张江高科技园区车辆租赁项目")
    @NotBlank(message = "项目名称不能为空")
    private String projectName;

    @Schema(description = "生效日期", requiredMode = Schema.RequiredMode.REQUIRED, example = "2026-01-01")
    @NotNull(message = "生效日期不能为空")
    private LocalDate startDate;

    @Schema(description = "结束日期", requiredMode = Schema.RequiredMode.REQUIRED, example = "2026-12-31")
    @NotNull(message = "结束日期不能为空")
    private LocalDate endDate;

    @Schema(description = "付款方式", example = "月付")
    private String paymentMethod;

    @Schema(description = "付款周期", example = "每月1日")
    private String paymentCycle;

    @Schema(description = "签约公司（乙方）", example = "上海某某汽车租赁有限公司")
    private String signingCompany;

    @Schema(description = "交车省份", example = "上海市")
    private String deliveryProvince;

    @Schema(description = "交车城市", example = "浦东新区")
    private String deliveryCity;

    @Schema(description = "交车地点", example = "张江高科技园区")
    private String deliveryLocation;

    @Schema(description = "备注", example = "特殊要求说明")
    private String remark;

    @Schema(description = "客户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    @NotNull(message = "客户ID不能为空")
    private Long customerId;

    @Schema(description = "客户名称（由后端根据客户ID自动填充）", example = "上海某某科技有限公司")
    private String customerName;

    @Schema(description = "是否三方合同", example = "false")
    private Boolean thirdPartyEnabled;

    @Schema(description = "丙方客户ID", example = "2")
    private Long thirdPartyCustomerId;

    @Schema(description = "丙方名称", example = "北京某某公司")
    private String thirdPartyName;

    @Schema(description = "业务部门ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    @NotNull(message = "业务部门ID不能为空")
    private Long businessDeptId;

    @Schema(description = "业务负责人ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    @NotNull(message = "业务负责人ID不能为空")
    private Long businessManagerId;

    @Schema(description = "氢费承担方", example = "客户")
    private String hydrogenBearer;

    @Schema(description = "氢气付款方式", example = "预付")
    private String hydrogenPaymentMethod;

    @Schema(description = "氢气预付款", example = "5000.00")
    private BigDecimal hydrogenPrepay;

    @Schema(description = "退还车氢气单价", example = "35.00")
    private BigDecimal hydrogenReturnPrice;

    @Schema(description = "账单计算方式", example = "按自然月结算")
    private String billingMethod;

    @Schema(description = "主车型", example = "氢能重卡")
    private String mainVehicleType;

}
