package com.sonymusic.dx.persistence.gras;

import jakarta.persistence.Column;
import jakarta.persistence.Embeddable;

import java.io.Serializable;

@Embeddable
public class TrackPk implements Serializable {

    private static final long serialVersionUID = 1L;
    @Column(name = "track_no")
    private String trackNo;

    @Column(name = "track_ext")
    private String trackExt;

    public TrackPk() {
        if (trackExt == null)
            trackExt = "  ";
    }

    public TrackPk(String trackNo, String trackExt) {
        this.trackNo = trackNo;
        this.trackExt = trackExt;
    }

    public String getTrackNo() {
        return trackNo;
    }

    public void setTrackNo(String trackNo) {
        this.trackNo = trackNo;
    }

    public String getTrackExt() {
        // Sometimes when retrieving this field from the database via EJBQL queries, hibernate seems to trim this field from two spaces down to one, even though it is a fixed
        // width column in the db, so it should always be two characters long. To work around this, we're always adding the two spaces here if they are not present.
        if (trackExt != null)
            return String.format("%-2s", trackExt);
        return trackExt;
    }

    public void setTrackExt(String trackExt) {
        this.trackExt = trackExt;
    }

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

}
