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

import com.unicorn.hgzero.meeting.biz.domain.Todo;
import lombok.Builder;
import lombok.Getter;

import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * Todo 데이터 전송 객체
 * Todo 관련 정보 전달
 */
@Getter
@Builder
public class TodoDTO {

    /**
     * Todo 고유 식별자
     */
    private final String todoId;

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

    /**
     * Todo 내용
     */
    private final String content;

    /**
     * 담당자
     */
    private final String assignee;

    /**
     * 마감일
     */
    private final LocalDate dueDate;

    /**
     * 우선순위
     */
    private final String priority;

    /**
     * Todo 상태
     */
    private final String status;

    /**
     * 진행률 (0-100)
     */
    private final Integer progress;

    /**
     * 설명
     */
    private final String description;

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

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

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

    /**
     * 완료 시간
     */
    private final LocalDateTime completedAt;

    /**
     * Todo 제목
     */
    private final String title;

    /**
     * 담당자 ID
     */
    private final String assigneeId;

    /**
     * 담당자 이름
     */
    private final String assigneeName;

    /**
     * 완료한 사용자
     */
    private final String completedBy;

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

    /**
     * 회의 ID
     */
    private final String meetingId;

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

    /**
     * Todo 도메인 객체로부터 TodoDTO 생성
     */
    public static TodoDTO from(Todo todo) {
        return TodoDTO.builder()
                .todoId(todo.getTodoId())
                .minutesId(todo.getMinutesId())
                .content(todo.getDescription())
                .assignee(todo.getAssigneeId())
                .dueDate(todo.getDueDate())
                .priority(todo.getPriority())
                .status(todo.getStatus())
                .progress(todo.getProgress())
                .description(todo.getDescription())
                .createdBy(todo.getCreatedBy())
                .createdAt(todo.getCreatedAt())
                .updatedAt(todo.getLastModifiedAt())
                .completedAt(todo.getCompletedAt())
                .title(todo.getTitle())
                .assigneeId(todo.getAssigneeId())
                .assigneeName(null) // 담당자 이름은 별도 조회 필요
                .completedBy(todo.getCompletedBy())
                .minutesTitle(null) // 회의록 제목은 별도 조회 필요
                .meetingId(todo.getMeetingId())
                .meetingTitle(null) // 회의 제목은 별도 조회 필요
                .build();
    }
}