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

import org.hibernate.annotations.Type;

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 io.delphiplatform.api.v3.constant.DbSchemaConstants;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Entity
@Table(name = "fact_tiktok_top_chart_isrc", schema = DbSchemaConstants.TIKTOK)
@Getter
@Setter
@EqualsAndHashCode(of = "id")
@ToString
public class FactTikTokTopTrackEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @EmbeddedId
    private FactTikTokTopTrackEntityId id;

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

    @Column(name = "isrc", insertable = false, updatable = false)
    private String isrc;

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

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

    @Column(name = "current_position")
    private Integer currentPosition;

    @Column(name = "prev_position")
    private Integer prevPosition;

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

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

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

    @Column(name = "creations")
    private Long creations;

    @Column(name = "previous_1day_creations")
    private Long previous1DayCreations;

    @Column(name = "previous_week_1day_creations")
    private Long previousWeek1DayCreations;

    @Column(name = "previous_week_7day_creations")
    private Long previousWeek7DayCreations;

    @Column(name = "last_7day_top_markets", columnDefinition = "text[]")
    @Type(type = "io.delphiplatform.api.v3.rdb.entity.converter.CustomStringArrayType")
    private String[] last7DayTopMarkets;
}
