package io.delphiplatform.api.v3.rdb.entity.shazam;

import org.hibernate.annotations.Formula;

import java.io.Serializable;
import java.time.LocalDate;

import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@Entity
@Table(name = "fact_shazam_chart", schema = "chartmetric")
@EqualsAndHashCode(of = "id")
public class FactShazamChartEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @EmbeddedId
    private FactShazamChartId id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "track_id", insertable = false, updatable = false)
    private ShazamTrackEntity track;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "chart_id", insertable = false, updatable = false)
    private ShazamChartEntity chart;

    @Column(name = "latest_position")
    private Integer latestPosition;

    @Column(name = "chart_date", nullable = false, insertable = false, updatable = false)
    private LocalDate date;

    @Column(name = "date_gap")
    private Integer dateGap;

    @Column(name = "is_chart_entry")
    private Boolean isEntry;

    @Column(name = "is_chart_reentry")
    private Boolean isReentry;

    @Column(name = "is_exit")
    private Boolean isExit;

    @Column(name = "position_delta")
    private Integer positionDelta;

    @Column(name = "prev_chart_date")
    private LocalDate previousDate;

    @Column(name = "previous_position")
    private Integer previousPosition;

    @Column(name = "total_positions")
    private Integer totalPositions;

    @Formula("(latest_position - previous_position)")
    private Integer trend;

    @Column(name = "on_chart_days")
    private Integer onChartDays;

}
