package incheon.ags.mrb.share.vo;

import incheon.com.cmm.ComDefaultVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 레시피 공유 VO 클래스
 * - 레시피 공유 요청 및 승인 정보 관리
 */
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@ToString
@Schema(description = "레시피 공유 정보")
public class RecipeShrnVO extends ComDefaultVO {

    @Schema(description = "공유 ID (자동 생성)", example = "1")
    private Integer shrnId;

    @NotNull(message = "레시피 ID는 필수입니다")
    @Schema(description = "레시피 ID", example = "1", required = true)
    private Integer recipeId;

    @NotBlank(message = "승인 상태는 필수입니다")
    @Pattern(regexp = "^[PYN]$", message = "승인 상태는 P(대기), Y(승인), N(거부) 중 하나여야 합니다")
    @Schema(description = "승인 상태 (P:대기, Y:승인, N:거부)", example = "P", required = true)
    private String aprvStts;

    @Schema(description = "공유 요청 일시", example = "2024-12-19T10:25:00")
    private LocalDateTime shrnDmndYmd;

    @Schema(description = "공유 승인 일시", example = "2024-12-19T10:30:00")
    private LocalDateTime shrnAprvYmd;

    @Schema(description = "최초 등록 일시", example = "2024-12-19T10:25:00")
    private LocalDateTime frstRegDt;

    @Schema(description = "최초 등록자 ID", example = "admin01")
    private String frstRegId;

    @Schema(description = "최종 수정 일시", example = "2024-12-19T10:30:00")
    private LocalDateTime lastMdfcnDt;

    @Schema(description = "최종 수정자 ID", example = "admin01")
    private String lastMdfcnId;

    // 조인을 위한 추가 필드
    @Schema(description = "레시피명 (조인용)", example = "인천 관광지도")
    private String recipeNm;

    @Schema(description = "썸네일 URL (조인용)", example = "/static/thumbs/recipe-1.png")
    private String thmbUrl;

    @Schema(description = "요청자 ID (조인용)", example = "user01")
    private String wrtrId;

    @Schema(description = "요청자 이름 (조인용)", example = "홍길동")
    private String wrtrNm;

    @Schema(description = "요청자 부서명 (조인용)", example = "토지정보과")
    private String wrtrDeptNm;

    @Schema(description = "레시피 분류코드 (검색용)", example = "A")
    private String recipeClsfCd;

    @Schema(description = "공유 대상 이름 목록 (UI 표시용, 그룹 멤버 펼친 결과)", example = "[\"홍길동\", \"김철수\"]")
    private List<String> shareTargetNames;

    @Schema(description = "총 건수 (COUNT(*) OVER())", example = "42")
    private Integer totalCount;

    @Schema(description = "공유수 (승인 완료된 공유 대상자 수)", example = "5")
    private Integer shareCount;
}

