package itn.com.annotation;


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 개인정보 처리 이력 로그 기록을 위한 메서드 어노테이션.
 *
 * <p>개인정보 조회, 수정, 삭제, 다운로드 등이 발생하는 컨트롤러 메서드에 선언한다.
 * AOP가 메서드 실행 후 이 어노테이션의 설정값과 요청 정보를 읽어
 * 개인정보 처리 이력 로그를 저장한다.</p>
 *
 * <pre>
 * {@code
 * @PersonalLog(
 *     action = "삭제",
 *     description = "기업회원 상세정보",
 *     target = "#{object}.{method}" or "#{object}
 *     search = "#{object}.{method}" or "#{object}
 * )
 * }
 * </pre>
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface PersonalLog {
    /**
     * 개인정보 처리 행위.
     *
     * <p>예: 조회, 수정, 삭제, 다운로드</p>
     *
     * @return 개인정보 처리 행위명
     */
    String action();

    /**
     * 개인정보를 처리한 화면 또는 업무의 설명.
     *
     * <p>예: 회원 상세정보, 기업회원 목록, 회원 엑셀 다운로드</p>
     *
     * @return 처리 화면·업무 설명
     */
    String description();

    /**
     * 개인정보 처리 대상.
     *
     * <p>단건 처리 시 대상 회원 ID 등을 기록한다.
     * SpEL 표현식을 사용할 수 있으며, 메서드 첫 번째 인자의 회원 ID는
     * {@code "#{object}.{method}"}처럼 지정한다.</p>
     *
     * @return 처리 대상 정보, 미지정 시 빈 문자열
     */
    String target() default "";

    /**
     * 목록 조회 또는 다운로드 시 사용한 검색 조건.
     *
     * <p>검색어, 기간, 조회 건수 등 대상 정보를 보완하기 위한 용도다.</p>
     *
     * @return 검색 조건 정보, 미지정 시 빈 문자열
     */
    String search() default "";
}
