package incheon.ags.mrb.share.vo;

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 javax.validation.constraints.Size;
import java.time.LocalDateTime;

/**
 * 레시피 공유 대상 상세 VO 클래스
 * - 레시피 공유 대상자 관리
 */
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@ToString
@Schema(description = "레시피 공유 대상 상세 정보")
public class RecipeShrnDtlVO {

    @NotNull(message = "공유 ID는 필수입니다")
    @Schema(description = "공유 ID", example = "1", required = true)
    private Integer shrnId;

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

    @NotBlank(message = "공유 대상 코드는 필수입니다")
    @Pattern(regexp = "^[UG]$", message = "공유 대상 코드는 U(사용자) 또는 G(그룹)여야 합니다")
    @Schema(description = "공유 대상 코드 (U:사용자, G:그룹)", example = "U", required = true)
    private String shrnTrgtCd;

    @NotBlank(message = "공유 대상 ID는 필수입니다")
    @Size(max = 50, message = "공유 대상 ID는 50자를 초과할 수 없습니다")
    @Schema(description = "공유 대상 ID (사용자ID 또는 그룹ID)", example = "user01", required = true)
    private String shrnTrgtId;

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

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

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

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

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

    @Schema(description = "승인 상태 (조인용, P:대기, Y:승인, N:거부)", example = "Y")
    private String aprvStts;

    @Schema(description = "공유 대상 이름 (조인용)", example = "홍길동")
    private String shrnTrgtNm;

    @Schema(description = "공유 대상 부서명 (조인용)", example = "토지정보과")
    private String shrnTrgtDeptNm;
}
