package incheon.ags.ias.srvy.srvyRspns.web.dto;

import incheon.ags.ias.srvy.srvyRspns.vo.SrvyRspnsVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;

@Getter
@Setter
public class SrvyRspnsRequestDTO {

    @Schema(description = "설문조사 일련번호", example = "1", required = true)
    @NotNull(message = "설문조사 일련번호는 필수 항목입니다.")
    private String srvySn;

    @Schema(description = "설문문항 일련번호", example = "1", required = true)
    @NotNull(message = "설문문항 일련번호는 필수 항목입니다.")
    private String srvyQitemSn;

    @Schema(description = "설문응답자 일련번호", example = "1", required = true)
    @NotNull(message = "설문응답자 일련번호는 필수 항목입니다.")
    private String srvyRspdntSn;

    @Schema(description = "설문응답 일련번호", example = "1")
    private String srvyRspnsSn;

    @Schema(description = "설문문항 선택지 일련번호", example = "1")
    private String srvyQitemArtclSn;

    @Schema(description = "응답 내용", example = "매우 만족합니다")
    private String rspnsCn;

    @Schema(description = "기타 응답 내용", example = "추가 의견")
    private String etcRspnsCn;

    @Schema(description = "최초 등록자 ID", example = "ADMIN", required = true)
    @NotBlank(message = "최초 등록자 ID는 필수 항목입니다.")
    private String frstRegId;

    @Schema(description = "최초 등록 일시", example = "2024-01-01T09:00:00")
    @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss")
    private LocalDateTime frstRegDt;

    @Schema(description = "최종 수정자 ID", example = "ADMIN", required = true)
    @NotBlank(message = "최종 수정자 ID는 필수 항목입니다.")
    private String lastMdfcnId;

    @Schema(description = "최종 수정 일시", example = "2024-01-02T10:00:00")
    @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss")
    private LocalDateTime lastMdfcnDt;

    public SrvyRspnsVO toEntity() {
        SrvyRspnsVO vo = new SrvyRspnsVO();
        // 문자열을 Integer로 변환
        if (this.srvySn != null && !this.srvySn.trim().isEmpty()) {
            vo.setSrvySn(Integer.parseInt(this.srvySn));
        }
        if (this.srvyQitemSn != null && !this.srvyQitemSn.trim().isEmpty()) {
            vo.setQitemSn(Integer.parseInt(this.srvyQitemSn));
        }
        if (this.srvyRspdntSn != null && !this.srvyRspdntSn.trim().isEmpty()) {
            vo.setSrvyRspdntSn(Integer.parseInt(this.srvyRspdntSn));
        }
        if (this.srvyRspnsSn != null && !this.srvyRspnsSn.trim().isEmpty()) {
            vo.setRspnsSn(Integer.parseInt(this.srvyRspnsSn));
        }
        if (this.srvyQitemArtclSn != null && !this.srvyQitemArtclSn.trim().isEmpty()) {
            vo.setArtclSn(Integer.parseInt(this.srvyQitemArtclSn));
        }
        vo.setRspnsCn(this.rspnsCn);
        vo.setEtcRspnsCn(this.etcRspnsCn);
        vo.setSrvyRspnsCrtUserId(this.frstRegId);
        vo.setSrvyRspnsCrtDt(this.frstRegDt != null ? java.sql.Timestamp.valueOf(this.frstRegDt) : null);
        vo.setSrvyRspnsChgUserId(this.lastMdfcnId);
        vo.setSrvyRspnsChgDt(this.lastMdfcnDt != null ? java.sql.Timestamp.valueOf(this.lastMdfcnDt) : null);
        return vo;
    }
}
