package com.sonymusic.dx.persistence.gras;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;

@Entity
@Table(name = "vgras177")
//@TypeDef(name = "YYYYMMDD_String_Date", typeClass = StringToDateType.class, parameters = @Parameter(name = "format", value = "yyyyMMdd"))
public class SplitDeal extends RAASClientSpecificEntity {

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "deal_no", nullable = false)
    private Long dealNo;

    @Column(name = "deal_match", nullable = false, length = 250)
    private String dealName;

    @Column(name = "valid_from_date", nullable = false, length = 8)
//    @Type(type = "YYYYMMDD_String_Date")
    private Date validFrom;

    @Column(name = "valid_until_date", nullable = false, length = 8)
//    @Type(type = "YYYYMMDD_String_Date")
    private Date validUntil;

    @OneToMany(mappedBy = "splitDeal", fetch = FetchType.LAZY)
    private List<RepOwnerIncludedTerritorySplitDeal> repOwnerIncludedTerritorySplitDeals = new ArrayList<RepOwnerIncludedTerritorySplitDeal>();

    @OneToMany(mappedBy = "splitDeal", fetch = FetchType.LAZY)
    private List<RepOwnerExcludedTerritorySplitDeal> repOwnerExcludedTerritorySplitDeals = new ArrayList<RepOwnerExcludedTerritorySplitDeal>();

    @OneToMany(mappedBy = "splitDeal", fetch = FetchType.LAZY)
    private List<SplitDealPrimary> splitDealPrimarys = new ArrayList<SplitDealPrimary>();

    @OneToMany(mappedBy = "splitDeal", fetch = FetchType.LAZY)
    private List<ParticipantSplitDeal> participantSplitDeals = new ArrayList<ParticipantSplitDeal>();

    public Long getDealNo() {
        return dealNo;
    }

    public void setDealNo(Long dealNo) {
        this.dealNo = dealNo;
    }

    public String getDealName() {
        return dealName;
    }

    public void setDealName(String dealName) {
        this.dealName = dealName;
    }

    public Date getValidFrom() {
        return validFrom;
    }

    public void setValidFrom(Date validFrom) {
        this.validFrom = validFrom;
    }

    public Date getValidUntil() {
        return validUntil;
    }

    public void setValidUntil(Date validUntil) {
        this.validUntil = validUntil;
    }

    public List<RepOwnerIncludedTerritorySplitDeal> getRepOwnerIncludedTerritorySplitDeals() {
        return repOwnerIncludedTerritorySplitDeals;
    }

    public void setRepOwnerIncludedTerritorySplitDeals(List<RepOwnerIncludedTerritorySplitDeal> repOwnerIncludedTerritorySplitDeals) {
        this.repOwnerIncludedTerritorySplitDeals = repOwnerIncludedTerritorySplitDeals;
    }

    public List<RepOwnerExcludedTerritorySplitDeal> getRepOwnerExcludedTerritorySplitDeals() {
        return repOwnerExcludedTerritorySplitDeals;
    }

    public void setRepOwnerExcludedTerritorySplitDeals(List<RepOwnerExcludedTerritorySplitDeal> repOwnerExcludedTerritorySplitDeals) {
        this.repOwnerExcludedTerritorySplitDeals = repOwnerExcludedTerritorySplitDeals;
    }

    public List<SplitDealPrimary> getSplitDealPrimarys() {
        return splitDealPrimarys;
    }

    public void setSplitDealPrimarys(List<SplitDealPrimary> splitDealPrimarys) {
        this.splitDealPrimarys = splitDealPrimarys;
    }

    public List<ParticipantSplitDeal> getParticipantSplitDeals() {
        return participantSplitDeals;
    }

    public void setParticipantSplitDeals(List<ParticipantSplitDeal> participantSplitDeals) {
        this.participantSplitDeals = participantSplitDeals;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((getDealNo() == null) ? 0 : getDealNo().hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        SplitDeal other = (SplitDeal) obj;
        if (getDealNo() == null) {
            if (other.getDealNo() != null)
                return false;
        } else if (!getDealNo().equals(other.getDealNo()))
            return false;
        return true;
    }

}
