package com.eksad.masterdata.common.dto;

import com.eksad.ddms.common.dto.CreationalSpecificationDTO;
import com.eksad.ddms.common.util.status.DataStatus;
import com.eksad.masterdata.common.listEnum.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.sql.Time;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.UUID;

/**
 * @author hello world
 */
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class PromoDTO {

    private Boolean isJoinable;
    private String promoID;
    private String promoCode;
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Jakarta")
    private Date promoStartDate;
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Jakarta")
    private Date promoEndDate;
    private String promoName;
    private String promoSource;
    private String categoryID;
    //    private CustomerType customerType;
//    private PromoBookingType promoBookingType;
//    private PromoCustomerOccupationType customerOccupation;
//    private PromoGenderCustomerType customerGender;
    private PromoAhassType ahassType;
    private PromoAreaType areaType;
    private PromoLokasiType lokasiType;
    private PromoProgramType programType;
    private String kelipatanKM;
    private Time jamMulai;
    private Time jamAkhir;
    private String hariBerlaku;
    private DataStatus promoStatus;
    private CreationalSpecificationDTO promoCreationalDTO;
    private List<PromoUnitBerlakuDTO> listPromoUnitBerlaku;
    //    private List<WorkshopServicePromoDTO> listPromoJasa;
    private List<PromoDiscountPartDTO> listDiscountPart;
    private List<ConfigPackageServicePartPromoDTO> listPackageService;
    private List<PromoAreaDTO> listPromoArea;
    private List<PromoPosDTO> listPromoPos;
    private List<PromoAhassDTO> listPromoAhass;
    private List<PromoCustomerJobDTO> listPromoCustomerJob;
    //    private PromoJasaBengkelType promoJasaBengkelType;
    private PromoSparepartType promoSparepartType;
    private PromoPackageServiceType promoPackageServiceType;
    private String promoCustomer;
    private Integer jumlahService;
    private Integer jumlahBerlaku;
    private Integer jumlahPengulangan;
    private PromoBerlakuAhassType promoBerlakuAhassType;
    private String ketentuanSettings;
    private PromoKetentuanType promoKetentuanType;
    private Double totalDiscount;

    @JsonIgnore
    public PromoDTO getInstance() {

        return new PromoDTO(
                Boolean.FALSE,
                UUID.randomUUID().toString().substring(0, 8).toUpperCase(),
                UUID.randomUUID().toString().substring(0, 8).toUpperCase(),
                new Date(),
                new Date(),
                "Promo Name",
                "Main Dealer",
                "Category ID",
//                CustomerType.SPESIFIC_CUSTOMER,
//                PromoBookingType.BOOKING,
//                PromoCustomerOccupationType.SPESIFIC_JOB,
//                PromoGenderCustomerType.ALL_GENDER,
                PromoAhassType.SPESIFIC_AHASS,
                PromoAreaType.SPESIFIC_AREA,
                PromoLokasiType.SPESIFIC_LOKASI,
                PromoProgramType.DISCOUNT,
                "4000",
                new Time(System.currentTimeMillis()),
                new Time(System.currentTimeMillis()),
                "Senin,Selasa,Rabu,Kamis,Jumat,Sabtu,Minggu",
                DataStatus.ACTIVE,
                new CreationalSpecificationDTO(new Date(), "System", new Date(), "System"),
                Arrays.asList(new PromoUnitBerlakuDTO().getInstance()),
//                Arrays.asList(new WorkshopServicePromoDTO().getInstance()),
                Arrays.asList(new PromoDiscountPartDTO().getInstance()),
                Arrays.asList(new ConfigPackageServicePartPromoDTO().getInstance()),
                Arrays.asList(new PromoAreaDTO().getInstance()),
                Arrays.asList(new PromoPosDTO().getInstance()),
                Arrays.asList(new PromoAhassDTO().getInstance()),
                Arrays.asList(new PromoCustomerJobDTO().getInstance()),
//                PromoJasaBengkelType.ALL_SERVICE,
                PromoSparepartType.SPAREPARTS_GROUP,
                PromoPackageServiceType.SPESIFIC,
                "Driver Gojek",
                4,
                1,
                2,
                PromoBerlakuAhassType.EACH_AHASS,
                "Pengguna,Pemilik,Pembeli",
                PromoKetentuanType.CUSTOMER,
                0.0
        );

    }

    @Override
    public String toString() {
        return "PromoDTO{" +
                "isJoinable=" + isJoinable +
                ", promoID='" + promoID + '\'' +
                ", promoCode='" + promoCode + '\'' +
                ", promoStartDate=" + promoStartDate +
                ", promoEndDate=" + promoEndDate +
                ", promoName='" + promoName + '\'' +
                ", promoSource='" + promoSource + '\'' +
                ", categoryID='" + categoryID + '\'' +
//                ", customerType=" + customerType +
//                ", promoBookingType=" + promoBookingType +
//                ", customerOccupation=" + customerOccupation +
//                ", customerGender=" + customerGender +
                ", ahassType=" + ahassType +
                ", areaType=" + areaType +
                ", lokasiType=" + lokasiType +
                ", programType=" + programType +
                ", kelipatanKM='" + kelipatanKM + '\'' +
                ", jamMulai=" + jamMulai +
                ", jamAkhir=" + jamAkhir +
                ", hariBerlaku='" + hariBerlaku + '\'' +
                ", promoStatus=" + promoStatus +
                ", promoCreationalDTO=" + promoCreationalDTO +
                ", listPromoUnitBerlaku=" + listPromoUnitBerlaku +
//                ", listPromoJasa=" + listPromoJasa +
                ", listDiscountPart=" + listDiscountPart +
                ", listPackageService=" + listPackageService +
                ", listPromoArea=" + listPromoArea +
                ", listPromoPos=" + listPromoPos +
                ", listPromoAhass=" + listPromoAhass +
                ", listPromoCustomerJob=" + listPromoCustomerJob +
//                ", promoJasaBengkelType=" + promoJasaBengkelType +
                ", promoSparepartType=" + promoSparepartType +
                ", promoPackageServiceType=" + promoPackageServiceType +
                ", promoCustomer='" + promoCustomer + '\'' +
                ", jumlahService=" + jumlahService +
                ", jumlahBerlaku=" + jumlahBerlaku +
                ", jumlahPengulangan=" + jumlahPengulangan +
                ", promoBerlakuAhassType=" + promoBerlakuAhassType +
                ", ketentuanSettings='" + ketentuanSettings + '\'' +
                ", promoKetentuanType=" + promoKetentuanType +
                ", totalDiscount=" + totalDiscount +
                '}';
    }
}