package com.dne.ems.dto;

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

import com.dne.ems.model.enums.PollutionType;
import com.dne.ems.model.enums.SeverityLevel;
import com.dne.ems.model.enums.TaskStatus;

/**
 * 任务详情DTO
 *
 * <p>包含任务的完整详细信息，用于详情展示
 *
 * @param id 任务ID
 * @param feedback 关联的反馈详情
 * @param title 任务标题
 * @param description 任务描述
 * @param severityLevel 严重等级
 * @param pollutionType 污染类型
 * @param textAddress 文字地址
 * @param gridX 网格X坐标
 * @param gridY 网格Y坐标
 * @param status 任务状态
 * @param assignee 分配的工作人员(可能为null)
 * @param assignedAt 分配时间(可能为null)
 * @param completedAt 完成时间(可能为null)
 * @param history 任务历史记录
 * @param submissionInfo 任务提交信息(如果已提交)
 */
public record TaskDetailDTO(
        Long id,
        FeedbackDTO feedback,
        String title,
        String description,
        SeverityLevel severityLevel,
        PollutionType pollutionType,
        String textAddress,
        Integer gridX,
        Integer gridY,
        TaskStatus status,
        AssigneeDTO assignee,
        LocalDateTime assignedAt,
        LocalDateTime completedAt,
        List<TaskHistoryDTO> history,
        SubmissionInfoDTO submissionInfo
) {
    /**
     * 任务关联的反馈详情DTO
     *
     * @param feedbackId 反馈ID
     * @param eventId 事件ID
     * @param title 反馈标题
     * @param description 反馈描述
     * @param severityLevel 严重等级
     * @param textAddress 文字地址
     * @param submitterId 提交人ID
     * @param submitterName 提交人姓名
     * @param createdAt 创建时间
     * @param imageUrls 图片URL列表
     */
    public record FeedbackDTO(
            Long feedbackId,
            String eventId,
            String title,
            String description,
            SeverityLevel severityLevel,
            String textAddress,
            Long submitterId,
            String submitterName,
            LocalDateTime createdAt,
            List<String> imageUrls
    ) {}

    /**
     * 任务分配人详情DTO
     *
     * @param id 工作人员ID
     * @param name 工作人员姓名
     * @param phone 联系电话
     */
    public record AssigneeDTO(
            Long id,
            String name,
            String phone
    ) {}

    /**
     * DTO for task submission details.
     *
     * @param comments The comments or notes from the submission.
     * @param attachments A list of attachments included in the submission.
     */
    public record SubmissionInfoDTO(
            String comments,
            List<AttachmentDTO> attachments
    ) {}
} 