package com.unicorn.hgzero.meeting.biz.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 회의록 데이터 전송 객체
 * 회의록 관련 정보 전달
 */
@Getter
@Builder
public class MinutesDTO {

    /**
     * 회의록 고유 식별자
     */
    private final String minutesId;

    /**
     * 회의 식별자
     */
    private final String meetingId;

    /**
     * 회의록 제목
     */
    private final String title;

    /**
     * 회의 일시
     */
    private final LocalDateTime meetingDate;

    /**
     * 회의 장소
     */
    private final String location;

    /**
     * 참석자 목록
     */
    private final List<String> participants;

    /**
     * 회의록 섹션 목록
     */
    private final List<SectionDTO> sections;

    /**
     * 회의록 상태
     */
    private final String status;

    /**
     * 작성자
     */
    private final String author;

    /**
     * 생성 시간
     */
    private final LocalDateTime createdAt;

    /**
     * 수정 시간
     */
    private final LocalDateTime updatedAt;

    /**
     * 확정 시간
     */
    private final LocalDateTime finalizedAt;

    /**
     * 버전
     */
    private final Integer version;

    /**
     * 메모
     */
    private final String memo;

    /**
     * 회의 제목
     */
    private final String meetingTitle;

    /**
     * 생성자
     */
    private final String createdBy;

    /**
     * 수정자
     */
    private final String lastModifiedBy;

    /**
     * 수정 시간
     */
    private final LocalDateTime lastModifiedAt;

    /**
     * Todo 개수
     */
    private final Integer todoCount;

    /**
     * 완료된 Todo 개수
     */
    private final Integer completedTodoCount;

    /**
     * 참석자 수
     */
    private final Integer participantCount;

    /**
     * 회의 정보
     */
    private final MeetingInfo meeting;

    /**
     * 섹션 목록
     */
    private final List<SectionInfo> sectionsInfo;

    /**
     * Todo 목록
     */
    private final List<TodoInfo> todos;

    // 중첩 클래스들

    @Getter
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class MeetingInfo {
        private String meetingId;
        private String title;
        private LocalDateTime scheduledAt;
        private LocalDateTime startedAt;
        private LocalDateTime endedAt;
        private String organizerId;
        private String organizerName;
    }

    @Getter
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class SectionInfo {
        private String sectionId;
        private String title;
        private String content;
        private Integer orderIndex;
        private boolean isLocked;
        private boolean isVerified;
        private String lockedBy;
        private LocalDateTime lockedAt;
        private String verifiedBy;
        private LocalDateTime verifiedAt;
    }

    @Getter
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class TodoInfo {
        private String todoId;
        private String title;
        private String description;
        private String assigneeId;
        private String assigneeName;
        private String priority;
        private String status;
        private LocalDateTime dueDate;
        private LocalDateTime completedAt;
        private String completedBy;
    }
}