package io.delphiplatform.api.v3.model.ads;

import com.fasterxml.jackson.annotation.JsonProperty;

import java.time.LocalDate;
import java.util.Objects;

import io.delphiplatform.api.v3.rdb.entity.ads.AdsAdSetEntity;

public class AdSet {

    @JsonProperty("ad_set_id")
    private String adSetId;

    @JsonProperty("ad_set_name")
    private String adSetName;

    @JsonProperty("start_date")
    private LocalDate startDate;

    @JsonProperty("end_date")
    private LocalDate endDate;

    public static AdSet from(AdsAdSetEntity entity) {
        AdSet adSet = new AdSet();
        adSet.adSetName(entity.getAdSetName());
        adSet.adSetId(entity.getAdSetId());
        if (entity.getDecibelCampaign() != null) {
            adSet.startDate(entity.getDecibelCampaign().getStartDate());
            adSet.endDate(entity.getDecibelCampaign().getEndDate());
        }
        return adSet;
    }

    public AdSet adSetId(String adSetId) {
        this.adSetId = adSetId;
        return this;
    }


    public String getAdSetId() {
        return adSetId;
    }

    public void setAdSetId(String adSetId) {
        this.adSetId = adSetId;
    }

    public AdSet adSetName(String adSetName) {
        this.adSetName = adSetName;
        return this;
    }


    public String getAdSetName() {
        return adSetName;
    }

    public void setAdSetName(String adSetName) {
        this.adSetName = adSetName;
    }


    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        AdSet adSet = (AdSet) o;
        return Objects.equals(this.adSetId, adSet.adSetId) &&
            Objects.equals(this.adSetName, adSet.adSetName);
    }


    public AdSet startDate(LocalDate startDate) {
        this.startDate = startDate;
        return this;
    }

    public LocalDate getStartDate() {
        return startDate;
    }

    public void setStartDate(LocalDate startDate) {
        this.startDate = startDate;
    }

    public AdSet endDate(LocalDate endDate) {
        this.endDate = endDate;
        return this;
    }

    public LocalDate getEndDate() {
        return endDate;
    }

    public void setEndDate(LocalDate endDate) {
        this.endDate = endDate;
    }

    @Override
    public int hashCode() {
        return Objects.hash(adSetId, adSetName, startDate, endDate);
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("class AdSet {\n");

        sb.append("    adSetId: ").append(toIndentedString(adSetId)).append("\n");
        sb.append("    adSetName: ").append(toIndentedString(adSetName)).append("\n");
        sb.append("    startDate: ").append(toIndentedString(adSetName)).append("\n");
        sb.append("    endDate: ").append(toIndentedString(adSetName)).append("\n");
        sb.append("}");
        return sb.toString();
    }

    private String toIndentedString(Object o) {
        if (o == null) {
            return "null";
        }
        return o.toString().replace("\n", "\n    ");
    }
}
