package com.ruoyi.system.domain.dto;

import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import lombok.Data;

/**
 * 客户申请开票入参。
 *
 * @author ruoyi
 * @date 2026-06-16
 */
@Data
public class ApplyInvoiceDto {

    /** 订单 id（须为当前登录客户的订单、state=3、payStatus=1） */
    @NotNull(message = "订单不能为空")
    private Long orderId;

    /** 发票类型 B2C/B2B */
    @NotBlank(message = "发票类型不能为空")
    @Pattern(regexp = "B2C|B2B|DONATION", message = "发票类型只能为 B2C、B2B 或 DONATION")
    private String category;

    /** 买方名称（B2B 公司名 / B2C 客户名；捐赠发票可不填，service 内按场景校验/回填） */
    private String buyerName;

    /** 买方统一编号（统编 8 码；B2B 必填，service 内强校验；B2C 不传） */
    @Pattern(regexp = "\\d{8}", message = "统一编号必须为 8 位数字")
    private String buyerUbn;

    /** 买方邮箱（B2B 必填；B2C 选 ezPay会员载具(2)时不收、其余可空） */
    @Email(message = "邮箱格式不正确")
    private String buyerEmail;

    /** 载具类型 0手机条码/1自然人凭证/2ezPay会员（B2C 必填，B2B 不传） */
    private String carrierType;

    /** 载具号码（carrierType 非空时必填，service 内校验） */
    private String carrierNum;

    /** 捐赠码（爱心码 3-7 位数字；category=B2C 且非空 → 捐赠分支，与载具/统编互斥，service 内校验） */
    private String loveCode;
}
