package io.delphiplatform.api.v3.model;

import com.fasterxml.jackson.annotation.JsonProperty;

import org.openapitools.jackson.nullable.JsonNullable;
import org.springframework.format.annotation.DateTimeFormat;

import java.time.LocalDate;

import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.SuperBuilder;

/**
 * AbstractChartPosition
 */
@Getter
@Setter
@SuperBuilder
public abstract class AbstractChartPosition {

    @JsonProperty("current")
    private Integer current;

    @JsonProperty("date")
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
    private LocalDate date;

    @JsonProperty("date_gap")
    private JsonNullable<Integer> dateGap = JsonNullable.undefined();

    @JsonProperty("is_entry")
    private Boolean isEntry = false;

    @JsonProperty("is_exit")
    private Boolean isExit;

    @JsonProperty("is_reentry")
    private Boolean isReentry = false;

    @JsonProperty("previous_date")
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
    private JsonNullable<LocalDate> previousDate = JsonNullable.undefined();

    @JsonProperty("previous_position")
    private Integer previousPosition;

    @JsonProperty("trend")
    private Integer trend;

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

        sb.append("    current: ").append(toIndentedString(current)).append("\n");
        sb.append("    date: ").append(toIndentedString(date)).append("\n");
        sb.append("    dateGap: ").append(toIndentedString(dateGap)).append("\n");
        sb.append("    isEntry: ").append(toIndentedString(isEntry)).append("\n");
        sb.append("    isExit: ").append(toIndentedString(isExit)).append("\n");
        sb.append("    isReentry: ").append(toIndentedString(isReentry)).append("\n");
        sb.append("    previousDate: ").append(toIndentedString(previousDate)).append("\n");
        sb.append("    previousPosition: ").append(toIndentedString(previousPosition)).append("\n");
        sb.append("    trend: ").append(toIndentedString(trend)).append("\n");
        sb.append("}");
        return sb.toString();
    }

    /**
     * Convert the given object to string with each line indented by 4 spaces (except the first line).
     */
    private String toIndentedString(Object o) {
        if (o == null) {
            return "null";
        }
        return o.toString().replace("\n", "\n    ");
    }
}
