package com.its.safe.entity.safe;

import com.its.safe.dto.safe.TbMessageDto;
import io.swagger.annotations.ApiModel;
import lombok.Builder;
import lombok.Data;

import java.io.Serializable;
import java.sql.Timestamp;

/**
 * 전파 메시지 정보 Entity Class
 */
@ApiModel("전파 메시지 정보")
@Data
@Builder
public class TbMessage implements Serializable {
    private static final long serialVersionUID = 1L;

    private Long seq;
    private String status;  // 발령 (상황) 코드:
                            // ① 실제 : 실제 상황
                            // ② 훈련 : 훈련 상황
                            // ③ 시험 : 시스템 관리 목적 으로 시험 (시스템 내부적으로만 진행하며 최종 말단 또는 장비까지의 전파는 진행 하지 않음, 예 : 전광판은 단말 표출x)
                            // ④ 점검 : 시스템 점검 (단말정보 회신 요망 : device_of_{system_id} (각 시스템별))
    private String msgType; // 발령 (구분) 코드 :
                            // ① 발령 : 최초의 경보 메시지 전송임을 표현
                            // ② 정정 : 기존 메시지에서 갱신된 내용이 있음을 표현
                            // ③ 취소 : 이전에 발령된 경보가 오보 또는 기타 사유 경우 해당 경보를 취소하기 위해 사용 (전광판 : 이전 발령 내용 화면 표출 중지)
                            // ④ 해제 : 이전 발령을 해제하는 내용(예 : 호우주의보가 해제되었습니다)을 전파하기 위해 사용
    private Long preSeq;    // (msg_type = 정정, 취소, 해제)시 처리할 대상인 이전 seq, 없으면 최근 것을 대상으로 처리하면 됨.
    private String title;   // 제목
    private String textBoard40Kr;   // 전광판 재난방송 문안(한국어)_전체 :  전광판 표출될 전체 문장 (한글 기준 20자 표출 가능시 전체 문장, textboard40_kr_1 + textboard40_kr_2)
    private String textBoard40Kr1;  // 전광판 재난방송 문안(한국어)_1행 : 전광판이 2행으로 표출 될 경우 (상행)에 표출될 문장 (가로 10자 X 세로 2행 기준)
    private String textBoard40Kr2;  // 전광판 재난방송 문안(한국어)_2행 : 전광판이 2행으로 표출 될 경우 (하행)에 표출될 문장 (가로 10자 X 세로 2행 기준)

    private String areaDesc;        // 지역명 : 법정동 이름, 복수개 입력시 컴마(,)로 구분함
    private String areaCode;        // 지역 코드 : 법정동 코드, 복수개 입력시 컴마(,)로 구분함
    private Timestamp createTime;   // 기록 시간 : 자동입력, CURRENT_TIMESTAMP()

    public TbMessageDto toDto() {
        return TbMessageDto.builder()
                .seq(this.seq)
                .status(this.status.trim())
                .msgType(this.msgType.trim())
                .preSeq(this.preSeq)
                .title(this.title)
                .textBoard40Kr(this.textBoard40Kr)
                .textBoard40Kr1(this.textBoard40Kr1)
                .textBoard40Kr2(this.textBoard40Kr2)
                .areaDesc(this.areaDesc)
                .areaCode(this.areaCode)
                .createTime(this.createTime)
                .build();
    }

}
