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

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.OffsetDateTime;

/**
 * AIS Target 캐시 엔트리 및 t_ais_position 테이블 매핑 모델
 *
 * 용도:
 * - Caffeine 캐시 저장 (key: mmsi)
 * - t_ais_position UPSERT (5분 집계 Job 편승)
 * - 배치 집계 시 VesselData로 변환
 *
 * mmsi는 String 타입 — 문자 혼합 MMSI 장비 수집 지원 (위법 장비 추적 필수)
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AisTargetEntity {

    // ========== PK ==========
    private String mmsi;

    // ========== 선박 식별 정보 ==========
    private Long imo;
    private String name;
    private String callsign;
    private String vesselType;
    private String extraInfo;

    // ========== 위치 정보 ==========
    private Double lat;
    private Double lon;
    // geom은 DB에서 ST_SetSRID(ST_MakePoint(lon, lat), 4326)로 생성

    // ========== 항해 정보 ==========
    private Double heading;
    private Double sog;
    private Double cog;
    private Integer rot;

    // ========== 선박 제원 ==========
    private Integer length;
    private Integer width;
    private Double draught;

    // ========== 목적지 정보 ==========
    private String destination;
    private OffsetDateTime eta;
    private String status;

    // ========== 타임스탬프 ==========
    private OffsetDateTime messageTimestamp;

    // ========== 선종 분류 정보 ==========
    private String signalKindCode;
    private String classType;
}
