package com.eactive.eai.rms.ext.djb.common;

import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.Pattern;

@Data
public class DjbProperty {
    
    // SMS 2차 인증

    @DjbPropertyValue(
            key = "djb.sms_auth.enabled",
            defaultValue = "true",
            description = "SMS 2차 인증 사용 여부. true 시 휴대폰번호 없는 사용자는 ID/PW 로그인 불가")
    private boolean smsAuthEnabled = false;

    @DjbPropertyValue(
            key = "djb.sms_auth.mode",
            defaultValue = "real",
            description = "인증번호 생성 모드: real(랜덤), hhmm00(현재시각+00), fixed(고정값)")
    @Pattern(regexp = "^(real|hhmm00|fixed)$", message = "djb.sms_auth.mode는 real, hhmm00, fixed 중 하나여야 합니다.")
    private String smsAuthMode = "real";

    @DjbPropertyValue(
            key = "djb.sms_auth.fixed_value",
            defaultValue = "654321",
            description = "mode가 fixed일 때 사용할 고정 인증번호 (6자리 숫자)")
    @Pattern(regexp = "^\\d{6}$", message = "djb.sms_auth.fixed_value는 6자리 숫자여야 합니다.")
    private String smsAuthFixedValue = "654321";


    @DjbPropertyValue(
            key = "djb.api.allow_ip_list",
            description = "API 접근 허용 IP 목록 (콤마(,)로 구분된 IP들, 예: 192.168.0.1, 192.168.1.*,127.*.*.*",
            defaultValue = "10.15.106.*, 10.14.8.*, 10.15.8.*, 192.168.240.*, 127.0.0.1, 192.168.132.*, 192.168.131.*"
    )
    private String apiAllowIpList = "10.15.106.*, 10.14.8.*, 10.15.8.*, 192.168.240.*, 127.0.0.1, 192.168.132.*, 192.168.131.*";
    
    
    

    public String toJsonString(boolean isPretty) {
    	return isPretty 
    			? new GsonBuilder().setPrettyPrinting().create().toJson(this)
				: new Gson().toJson(this);
    }


    // 기본 프로퍼티 목록을 콘솔로 출력 (가이드용)
    public static void main(String[] args) {
        System.out.println("| Key | Default Value | Description |");
        System.out.println("|-----|---------------|-------------|");

        for (java.lang.reflect.Field field : DjbProperty.class.getDeclaredFields()) {
            DjbPropertyValue annotation = field.getAnnotation(DjbPropertyValue.class);
            if (annotation != null) {
                String key = annotation.key();
                String defaultValue = annotation.defaultValue();
                String description = annotation.description();
                System.out.printf("| %s | %s | %s |%n", key, defaultValue, description);
            }
        }
    }
}












































