package com.eksad.masterdata.common.dto;

import com.eksad.ddms.common.dto.CreationalSpecificationDTO;
import com.eksad.masterdata.common.listEnum.TypeKPB;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.Embedded;
import jakarta.persistence.Temporal;
import jakarta.persistence.TemporalType;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.util.Date;
import java.util.UUID;

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class ClaimKPBDTO {
    private String claimkpbID;
    private String ahassID;
    private String woID;
    private String kodeKartuKPB;
    private TypeKPB jenisKPB;
    private String kodeMesin;
    private String noMesin;
    private Integer kmService;
    @Temporal(TemporalType.TIMESTAMP)
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy", timezone = "Asia/Jakarta")
    private Date tanggalPembelian;
    private String namaPemilik;
    @Temporal(TemporalType.TIMESTAMP)
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy", timezone = "Asia/Jakarta")
    private Date tanggalService;
    private String alamat;
    private String keterangan;
    private String status;
    private Boolean isClaim;

    private String noBatch;
    @Temporal(TemporalType.TIMESTAMP)
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy", timezone = "Asia/Jakarta")
    private Date tanggalPengajuan;
    private Double nominalPengajuan;
    @Temporal(TemporalType.TIMESTAMP)
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy", timezone = "Asia/Jakarta")
    private Date tanggalTerima;
    @Temporal(TemporalType.TIMESTAMP)
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy", timezone = "Asia/Jakarta")
    private Date tanggalTransfer;
    private Double nominalTransfer;
    private Double nominalClaim;
    private Double nominalPenggantian;
    private String kodeBuku;
    private String nomorBuku;
    private String sourceTanggalPembelian;

    @Embedded
    private CreationalSpecificationDTO claimKpbCreationalDTO;

    @JsonIgnore
    public ClaimKPBDTO getInstance() {
        return new ClaimKPBDTO(
                UUID.randomUUID().toString().substring(0, 8).toUpperCase(),
                "00999",
                UUID.randomUUID().toString().substring(0, 8).toUpperCase(),
                "12345",
                TypeKPB.KPB_1,
                "kode Mesin 123",
                "no Mesin 123",
                2000,
                new Date(),
                "EKSAD",
                new Date(),
                "bandung",
                "keterangan 1",
                "APPROVED",
                Boolean.TRUE,
                "BATCH 1",
                new Date(),
                999.00,
                new Date(),
                new Date(),
                909.00,
                9090.00,
                90909.00,
                "522",
                "255",
                "ENTRY",
                new CreationalSpecificationDTO().getInstance()
        );
    }
}