package com.unicorn.hgzero.notification.dto.response;

import com.unicorn.hgzero.notification.domain.NotificationSetting;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.time.LocalTime;

/**
 * 알림 설정 응답 DTO
 *
 * 사용자 알림 설정 조회 시 사용
 * 채널 활성화, 알림 유형, 방해 금지 시간대 정보 포함
 *
 * @author 준호 (Backend Developer)
 * @version 1.0
 * @since 2025-10-23
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Schema(description = "알림 설정 응답")
public class SettingsResponse {

    @Schema(description = "사용자 ID", example = "user-001")
    private String userId;

    @Schema(description = "이메일 알림 활성화 여부", example = "true")
    private Boolean emailEnabled;

    @Schema(description = "SMS 알림 활성화 여부", example = "false")
    private Boolean smsEnabled;

    @Schema(description = "Push 알림 활성화 여부", example = "false")
    private Boolean pushEnabled;

    @Schema(description = "회의 초대 알림 활성화 여부", example = "true")
    private Boolean invitationEnabled;

    @Schema(description = "Todo 할당 알림 활성화 여부", example = "true")
    private Boolean todoAssignedEnabled;

    @Schema(description = "Todo 리마인더 알림 활성화 여부", example = "true")
    private Boolean todoReminderEnabled;

    @Schema(description = "회의 리마인더 알림 활성화 여부", example = "true")
    private Boolean meetingReminderEnabled;

    @Schema(description = "회의록 수정 알림 활성화 여부", example = "true")
    private Boolean minutesUpdatedEnabled;

    @Schema(description = "Todo 완료 알림 활성화 여부", example = "false")
    private Boolean todoCompletedEnabled;

    @Schema(description = "방해 금지 모드 활성화 여부", example = "false")
    private Boolean dndEnabled;

    @Schema(description = "방해 금지 시작 시간", example = "22:00:00")
    private LocalTime dndStartTime;

    @Schema(description = "방해 금지 종료 시간", example = "08:00:00")
    private LocalTime dndEndTime;

    @Schema(description = "생성 일시", example = "2025-01-23T10:00:00")
    private LocalDateTime createdAt;

    @Schema(description = "수정 일시", example = "2025-01-23T10:05:00")
    private LocalDateTime updatedAt;

    /**
     * Entity를 DTO로 변환
     *
     * @param setting 알림 설정 엔티티
     * @return 알림 설정 응답 DTO
     */
    public static SettingsResponse from(NotificationSetting setting) {
        return SettingsResponse.builder()
            .userId(setting.getUserId())
            .emailEnabled(setting.getEmailEnabled())
            .smsEnabled(setting.getSmsEnabled())
            .pushEnabled(setting.getPushEnabled())
            .invitationEnabled(setting.getInvitationEnabled())
            .todoAssignedEnabled(setting.getTodoAssignedEnabled())
            .todoReminderEnabled(setting.getTodoReminderEnabled())
            .meetingReminderEnabled(setting.getMeetingReminderEnabled())
            .minutesUpdatedEnabled(setting.getMinutesUpdatedEnabled())
            .todoCompletedEnabled(setting.getTodoCompletedEnabled())
            .dndEnabled(setting.getDndEnabled())
            .dndStartTime(setting.getDndStartTime())
            .dndEndTime(setting.getDndEndTime())
            .createdAt(setting.getCreatedAt())
            .updatedAt(setting.getUpdatedAt())
            .build();
    }
}
