package gc.mda.signal_batch.domain.vessel.dto;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * 압축된 선박 궤적 데이터 전송용 DTO
 * LineStringM 대신 단순 배열로 전송하여 프론트엔드 파싱 부하 제거
 */
@Data
@Builder(toBuilder = true)
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
@Schema(description = "선박별 병합된 항적 데이터 (WebSocket/REST 공통)")
public class CompactVesselTrack {

    @Schema(description = "선박 고유 ID (MMSI)", example = "440113620")
    private String vesselId;

    @Schema(description = "국적 코드 (MID 기반, MMSI 앞 3자리로 판별)", example = "KR")
    private String nationalCode;

    @ArraySchema(
        schema = @Schema(
            description = "좌표 [경도, 위도]",
            type = "array",
            example = "[127.0638, 34.227527]"
        ),
        arraySchema = @Schema(
            description = "궤적 좌표 배열 [[lon, lat], ...] - 시간순 정렬",
            example = "[[127.0638, 34.227527], [127.063303, 34.226685], [127.063008, 34.226203]]"
        )
    )
    private List<double[]> geometry;

    @ArraySchema(
        schema = @Schema(description = "Unix timestamp (초)", example = "1768878312"),
        arraySchema = @Schema(
            description = "각 좌표에 대응하는 Unix timestamp 배열",
            example = "[\"1768878312\", \"1768878332\", \"1768878342\"]"
        )
    )
    @JsonProperty("timestamps")
    private List<String> timestamps;

    @ArraySchema(
        schema = @Schema(description = "속도 (knots)", example = "10.4"),
        arraySchema = @Schema(
            description = "각 좌표에 대응하는 속도 배열 (knots)",
            example = "[10.4, 10.4, 10.67]"
        )
    )
    private List<Double> speeds;

    @Schema(description = "전체 이동거리 (해리)", example = "1.64")
    private Double totalDistance;

    @Schema(description = "평균 속도 (knots)", example = "10.54")
    private Double avgSpeed;

    @Schema(description = "최대 속도 (knots)", example = "10.9")
    private Double maxSpeed;

    @Schema(description = "궤적 포인트 수", example = "38")
    private Integer pointCount;

    @Schema(description = "선박명", example = "SAM SUNG 2HO")
    private String shipName;

    @Schema(description = "선종 코드 (AIS ship type)", example = "74")
    private String shipType;

    @Schema(
        description = "선박 종류 코드 (000020:어선, 000021:함정, 000022:여객선, 000023:화물선, 000024:유조선, 000025:관공선, 000027:기타)",
        example = "000023"
    )
    private String shipKindCode;
}
