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

import org.hibernate.annotations.Formula;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import io.delphiplatform.api.v3.constant.ChartmetricPartner;
import io.delphiplatform.api.v3.rdb.entity.RegionEntity;
import io.delphiplatform.api.v3.rdb.entity.video.ShazamCityEntity;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;

@Entity
@Table(name = "dim_shazam_chart", schema = ChartmetricPartner.CHARTMETRIC_SCHEMA)
@Getter
@Setter
@EqualsAndHashCode(of = "chartId")
public class ShazamChartEntity {

    @Id
    private String chartId;

    @ManyToOne
    @JoinColumn(name = "shazam_country_id")
    private RegionEntity region;

    @ManyToOne
    @JoinColumn(name = "shazam_city_id")
    private ShazamCityEntity shazamCity;

    @Formula(
        "(select concat('Top Shazam ', case when ci.city_name is not null then concat(ci.city_name, ', ') end, upper(ch.shazam_country_id)) "
            + "from chartmetric.dim_shazam_chart ch left outer join chartmetric.dim_shazam_city ci "
            + "on ch.shazam_city_id = ci.shazam_city_id where ch.chart_id = chart_id)")
    private String name;

}
