package sgc.portal;

import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.nio.file.Paths;
import java.util.List;

/**
 * <pre>
 * W-Park 시스템의 환경 설정 값(application.yml로 부터)이 바인딩되는 클래스다.
 * 해당 클래스는 Spring container에 의해 관리되므로 설정 값이 필요한 곳에서
 * Injection 하여 사용하면 된다.
 * </pre>
 *
 * @author YongSang
 */
@Getter
@Setter
@ToString
@Component
@ConfigurationProperties(prefix="sgc")
public class SgcPortalProperties {

    /*
     * 웹스퀘어 관련 설정
     */
    private WebSquare webSquare = new WebSquare();

    /*
     * 첨부파일 설정
     */
    private Storage storage = new Storage();

    /*
     * 보안설정
     */
    private Security security = new Security();

    /*
     * Report 서버 설정
     */
    private Report report = new Report();


    /**
     * The type Web square.
     */
    @Data
    public static class WebSquare {
        /*
         * 웹스퀘어의 홈디렉토리를 지정
         */
        private String homeLocation;
    }

    /**
     * The type Storage.
     */
    @Data
    public static class Storage {
        /**
         * 첨부파일 저장 루트 경로
         */
        private String location = Paths.get(System.getProperty("user.home"), "files").toString();

        /**
         * 압축파일 생성 임시 저장 경로
         */
        private String tempLocation = Paths.get(location, "temp").toString();

        /**
         * 업로드 허용 확장자 리스트
         */
        private List<String> allowedExtensions;

        /**
         * 이미지 확장자 리스트
         */
        private List<String> imgAllowedExtensions;

        /**
         * 인터페이스 첨부파일 경로
         */
        private String interfaceLocation = Paths.get(System.getProperty("user.home"), "files", "interface").toString();

    }

    /**
     * The type Security.
     */
    @Data
    public static class Security {
        private boolean duplicateLoginUsed = false;
        private String salt;
        private String shortNumSalt;
        private String vectorId;
        private String transForm;
        private String vectorTransForm;
        private String vectorMessageForm;
    }

    /**
     * The type Report.
     */
    @Data
    public static class Report {
        private String serverUrl;
        private String schedulerIp;
        private String schedulerPort;
        private String directExportUri = "/jsp/oz_export_directexport.jsp";
    }


    /**
     * SmartBill
     */
    @Data
    public static class Smartbill {
        private String relayUrl;
    }

}