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

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalTime;

/**
 * 알림 설정 업데이트 요청 DTO
 *
 * 사용자가 알림 설정을 변경할 때 사용
 * 채널 활성화, 알림 유형, 방해 금지 시간대 설정
 *
 * @author 준호 (Backend Developer)
 * @version 1.0
 * @since 2025-10-23
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Schema(description = "알림 설정 업데이트 요청")
public class UpdateSettingsRequest {

    @Schema(description = "이메일 알림 활성화 여부", example = "true")
    @NotNull(message = "이메일 알림 활성화 여부는 필수입니다")
    private Boolean emailEnabled;

    @Schema(description = "SMS 알림 활성화 여부", example = "false")
    @NotNull(message = "SMS 알림 활성화 여부는 필수입니다")
    private Boolean smsEnabled;

    @Schema(description = "Push 알림 활성화 여부", example = "false")
    @NotNull(message = "Push 알림 활성화 여부는 필수입니다")
    private Boolean pushEnabled;

    @Schema(description = "회의 초대 알림 활성화 여부", example = "true")
    @NotNull(message = "회의 초대 알림 활성화 여부는 필수입니다")
    private Boolean invitationEnabled;

    @Schema(description = "Todo 할당 알림 활성화 여부", example = "true")
    @NotNull(message = "Todo 할당 알림 활성화 여부는 필수입니다")
    private Boolean todoAssignedEnabled;

    @Schema(description = "Todo 리마인더 알림 활성화 여부", example = "true")
    @NotNull(message = "Todo 리마인더 알림 활성화 여부는 필수입니다")
    private Boolean todoReminderEnabled;

    @Schema(description = "회의 리마인더 알림 활성화 여부", example = "true")
    @NotNull(message = "회의 리마인더 알림 활성화 여부는 필수입니다")
    private Boolean meetingReminderEnabled;

    @Schema(description = "회의록 수정 알림 활성화 여부", example = "true")
    @NotNull(message = "회의록 수정 알림 활성화 여부는 필수입니다")
    private Boolean minutesUpdatedEnabled;

    @Schema(description = "Todo 완료 알림 활성화 여부", example = "false")
    @NotNull(message = "Todo 완료 알림 활성화 여부는 필수입니다")
    private Boolean todoCompletedEnabled;

    @Schema(description = "방해 금지 모드 활성화 여부", example = "false")
    @NotNull(message = "방해 금지 모드 활성화 여부는 필수입니다")
    private Boolean dndEnabled;

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

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