package com.propertyManagement.business.domain.bo;

import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.propertyManagement.common.core.domain.BaseEntity;
import com.propertyManagement.common.core.validate.AddGroup;
import com.propertyManagement.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;

/**
 * 小区业主台账信息业务对象 wx_proprietor_ledger
 *
 * @author liushuai
 * @date 2025-05-15
 */

@Data
@EqualsAndHashCode(callSuper = true)
public class WxProprietorLedgerBo extends BaseEntity {

    /**
     * 主键
     */
    private Long proprietorId;

    /**
     * 用户ID
     */
    private Long userId;

    /**
     * 小区主键
     */
    @NotNull(message = "小区不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long communityId;

    /**
     * 小区名称
     */
    private String communityName;

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

    /**
     * 联系电话（多个以,分割）
     */
    @NotBlank(message = "联系电话不能为空", groups = { AddGroup.class, EditGroup.class })
    private String phone;

    /**
     * 房间户型
     */
    private String houseType;

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

    /**
     * 房间面积（㎡）
     */
    @NotNull(message = "房间面积（㎡）不能为空", groups = { AddGroup.class, EditGroup.class })
    private BigDecimal sqm;

    /**
     * 面积单价（元）
     */
    @NotNull(message = "面积单价（元）不能为空", groups = { AddGroup.class, EditGroup.class })
    private BigDecimal sqmPrice;

    /**
     * 物业月费
     */
    @NotNull(message = "物业月费(元)不能为空", groups = { AddGroup.class, EditGroup.class })
    private BigDecimal monthMoney;

    /**
     * 物业年费
     */
    @NotNull(message = "物业年费(元)不能为空", groups = { AddGroup.class, EditGroup.class })
    private BigDecimal yearMoney;

    /**
     * 出生日期
     */
    @JsonFormat(pattern = "YYYY-MM-dd")
    @NotNull(message = "出生日期不能为空", groups = { AddGroup.class, EditGroup.class })
    private Date birthDate;

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

    /**
     * 户籍地
     */
    @NotBlank(message = "户籍地不能为空", groups = { AddGroup.class, EditGroup.class })
    private String registerAddress;

    /**
     * 现居地址
     */
    private String presentAddress;

    /**
     * 水费预存余额
     */
    @NotNull(message = "水费预存余额不能为空", groups = { AddGroup.class, EditGroup.class })
    private BigDecimal waterPrepaidMoney;

    /**
     * 电费预存余额
     */
    @NotNull(message = "电费预存余额不能为空", groups = { AddGroup.class, EditGroup.class })
    private BigDecimal electricityPrepaidMoney;

    /**
     * 物业预存余额
     */
    @NotNull(message = "物业预存余额不能为空", groups = { AddGroup.class, EditGroup.class })
    private BigDecimal propertyPrepaidMoney;

    /**
     * 车位管理预存余额
     */
    @NotNull(message = "车位管理预存余额不能为空", groups = { AddGroup.class, EditGroup.class })
    private BigDecimal carportManagePrestoreMoney;

    /**
     * 车位租赁预存余额
     */
    @NotNull(message = "车位租赁预存余额不能为空", groups = { AddGroup.class, EditGroup.class })
    private BigDecimal carportLeasePrestoreMoney;

    /**
     * 储藏室租赁预存金额
     */
    @NotNull(message = "储藏室租赁预存金额不能为空", groups = { AddGroup.class, EditGroup.class })
    private BigDecimal storeroomLeasePrestoreMoney;

    /**
     * 其他项目预存金额
     */
    @NotNull(message = "其他项目预存金额不能为空", groups = { AddGroup.class, EditGroup.class })
    private BigDecimal otherPrestoreMoney;

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


}
