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 TemplateDTO {

    /**
     * 템플릿 고유 식별자
     */
    private final String templateId;

    /**
     * 템플릿 이름
     */
    private final String name;

    /**
     * 템플릿 설명
     */
    private final String description;

    /**
     * 템플릿 유형
     */
    private final String templateType;

    /**
     * 템플릿 섹션 목록
     */
    private final List<TemplateSectionDTO> sections;

    /**
     * 사용 여부
     */
    private final Boolean isActive;

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

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

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

    /**
     * 카테고리
     */
    private final String category;

    /**
     * 활성 상태
     */
    private final boolean active;

    /**
     * 사용 횟수
     */
    private final int usageCount;

    /**
     * 마지막 사용 시간
     */
    private final LocalDateTime lastUsedAt;

    /**
     * 템플릿 섹션 정보
     */
    @Getter
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class TemplateSectionDTO {
        /**
         * 섹션 ID
         */
        private String sectionId;

        /**
         * 섹션 제목
         */
        private String title;

        /**
         * 섹션 설명
         */
        private String description;

        /**
         * 섹션 내용
         */
        private String content;

        /**
         * 섹션 순서
         */
        private Integer orderIndex;

        /**
         * 필수 여부
         */
        private boolean required;

        /**
         * 입력 타입
         */
        private String inputType;

        /**
         * 플레이스홀더
         */
        private String placeholder;

        /**
         * 최대 길이
         */
        private int maxLength;

        /**
         * 편집 가능 여부
         */
        private boolean editable;
    }
}