package com.sonymusic.dx.persistence.gras;

import org.hibernate.type.YesNoConverter;

import jakarta.persistence.Column;
import jakarta.persistence.Convert;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToOne;
import jakarta.persistence.PrimaryKeyJoinColumn;
import jakarta.persistence.Table;

@Entity
@Table(name = "vgras111")
public class RepertoireOwner extends RAASClientSpecificEntity {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "rep_owner_key")
    private String repOwnerKey;

    @OneToOne(optional = false, fetch = FetchType.EAGER)
    @PrimaryKeyJoinColumn(name = "rep_owner_key", referencedColumnName = "company_key")
    private Company company;

    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    @JoinColumn(name = "profit_center_key", insertable = false, updatable = false)
    private ProfitCenter profitCenter;

    @Column(name = "is_prod_rep_owner")
    @Convert(converter = YesNoConverter.class)
    private Boolean isProdRepOwner;

    @Column(name = "is_track_rep_owner")
    @Convert(converter = YesNoConverter.class)
    private Boolean isTrackRepOwner;

    @Column(name = "is_active_tr_repown_flag")
    @Convert(converter = YesNoConverter.class)
    private Boolean isActiveTrackRepOwner;

    @Column(name = "is_active_pr_repown_flag")
    @Convert(converter = YesNoConverter.class)
    private Boolean isActiveProductRepOwner;

    @Column(name = "is_rec_project_rep_owner")
    @Convert(converter = YesNoConverter.class)
    private Boolean isRecProjectRepOwner;

    @Column(name = "is_active_pj_repown_flag")
    @Convert(converter = YesNoConverter.class)
    private Boolean isActiveProjectRepOwner;

    @Column(name = "is_particip_rep_owner")
    @Convert(converter = YesNoConverter.class)
    private Boolean isParticipRepOwner;

    @Column(name = "is_active_pa_repown_flag")
    @Convert(converter = YesNoConverter.class)
    private Boolean isActivePaRepOwner;

    protected RepertoireOwner() {

    }

    public ProfitCenter getProfitCenter() {
        return profitCenter;
    }

    public void setProfitCenter(ProfitCenter profitCenter) {
        this.profitCenter = profitCenter;
    }

    public RepertoireOwner(String repOwnerKey, String companyName){
        this.repOwnerKey = repOwnerKey;
        this.company = new Company(companyName);
    }

    public RepertoireOwner(String repoownerKey){
        this.repOwnerKey = repoownerKey;
    }


    public String getRepOwnerKey() {
        return repOwnerKey;
    }

    public void setRepOwnerKey(String repOwnerKey) {
        this.repOwnerKey = repOwnerKey;
    }

    public Company getCompany() {
        return company;
    }

    public void setCompany(Company company) {
        this.company = company;
    }

    public Boolean getIsProdRepOwner() {
        return isProdRepOwner;
    }

    public void setIsProdRepOwner(Boolean isProdRepOwner) {
        this.isProdRepOwner = isProdRepOwner;
    }

    public Boolean getIsTrackRepOwner() {
        return isTrackRepOwner;
    }

    public void setIsTrackRepOwner(Boolean isTrackRepOwner) {
        this.isTrackRepOwner = isTrackRepOwner;
    }

    public Boolean getIsActiveTrackRepOwner() {
        return isActiveTrackRepOwner;
    }

    public void setIsActiveTrackRepOwner(Boolean isActiveTrackRepOwner) {
        this.isActiveTrackRepOwner = isActiveTrackRepOwner;
    }

    public Boolean getIsActiveProductRepOwner() {
        return isActiveProductRepOwner;
    }

    public void setIsActiveProductRepOwner(Boolean isActiveProductRepOwner) {
        this.isActiveProductRepOwner = isActiveProductRepOwner;
    }

    public Boolean getIsRecProjectRepOwner() {
        return isRecProjectRepOwner;
    }

    public void setIsRecProjectRepOwner(Boolean isRecProjectRepOwner) {
        this.isRecProjectRepOwner = isRecProjectRepOwner;
    }

    public Boolean getIsActiveProjectRepOwner() {
        return isActiveProjectRepOwner;
    }

    public void setIsActiveProjectRepOwner(Boolean isActiveProjectRepOwner) {
        this.isActiveProjectRepOwner = isActiveProjectRepOwner;
    }

    public Boolean getIsParticipRepOwner() {
        return isParticipRepOwner;
    }

    public void setIsParticipRepOwner(Boolean isParticipRepOwner) {
        this.isParticipRepOwner = isParticipRepOwner;
    }

    public Boolean getIsActivePaRepOwner() {
        return isActivePaRepOwner;
    }

    public void setIsActivePaRepOwner(Boolean isActivePaRepOwner) {
        this.isActivePaRepOwner = isActivePaRepOwner;
    }

//    public Date getRightsReversionDate() {
//        return rightsReversionDate;
//    }
//
//    public void setRightsReversionDate(Date rightsReversionDate) {
//        this.rightsReversionDate = rightsReversionDate;
//    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((repOwnerKey == null) ? 0 : repOwnerKey.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;
        RepertoireOwner other = (RepertoireOwner) obj;
        if (repOwnerKey == null) {
            if (other.repOwnerKey != null)
                return false;
        } else if (!repOwnerKey.equals(other.repOwnerKey))
            return false;
        return true;
    }
}
