package com.aip.gateway.api.model.app;

import com.aip.gateway.api.aip.model.AipConfig;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;

import java.io.File;

@Slf4j
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class AipSettings {

    private String appName;             // 어플리케이션 이름
    private String appVersion;          // 어플리케이션 버전
    private String clientId;            // 어플리케이션 ID(클라이언트 ID)
    private String tenantId;            // 디렉토리(테넌트) ID
    private String mipData;             // Mip Data Path
    private String domain;              // Domain
    private String eMail;               // User E-Mail
    private String secretValue;         // 인증 비밀번호
    private String certThumbPrint;      // 인증서 지문
    private String loginType;           // 로그인 유형

    private String sourceFileDir;       // 작업 파일 경로
    private String targetFileDir;       // 작업 완료 파일 경로
    private String setLabelId;          // Label 설정 GUID
    private String deleteLabelId;       // Label 해제 GUID
    private String setTemplateId;       // Protection 설정 GUID
    private String deleteTemplateId;    // Protection 해제 GUID
    private String supportedFileExt;    // 지원하는 파일 확장자
    private String protectedFileExt;    // 암호화 시에 변환되는 파일 확장자

    public AipConfig getConfig() {
        return AipConfig.builder()
                .appName(appName)
                .appVersion(appVersion)
                .clientId(clientId)
                .tenantId(tenantId)
                .mipData(mipData)
                .loginType(getLoginType())
                .domain(domain)
                .eMail(eMail)
                .secretValue(secretValue)
                .certThumbPrint(certThumbPrint)
                .build();
    }

    private int getLoginType() {
        if (loginType == null) {
            return AipConfig.authLoginId;
        }
        if (loginType.equalsIgnoreCase("authLoginPassword")) return AipConfig.authLoginPassword;
        if (loginType.equalsIgnoreCase("authLoginCert")) return AipConfig.authLoginCert;
        return AipConfig.authLoginId;   // "authLoginId"
    }

    public void setValue(String key, String value)
    {
        if (key.isEmpty()) return;
        
        String orgKey = key.trim();
        if (orgKey.equalsIgnoreCase("AppName")) {
            appName = value;
        }
        else if (orgKey.equalsIgnoreCase("AppVersion")) {
            appVersion = value;
        }
        else if (orgKey.equalsIgnoreCase("ClientId")) {
            clientId = value;
        }
        else if (orgKey.equalsIgnoreCase("TenantId")) {
            tenantId = value;
        }
        else if (orgKey.equalsIgnoreCase("MipData")) {
            mipData = value;
        }
        else if (orgKey.equalsIgnoreCase("LoginType")) {
            loginType = value;
        }
        else if (orgKey.equalsIgnoreCase("Domain")) {
            domain = value;
        }
        else if (orgKey.equalsIgnoreCase("EMail")) {
            eMail = value;
        }
        else if (orgKey.equalsIgnoreCase("SecretValue")) {
            secretValue = value;
        }
        else if (orgKey.equalsIgnoreCase("CertThumbPrint")) {
            certThumbPrint = value;
        }
        else if (orgKey.equalsIgnoreCase("SourceFileDir")) {
            sourceFileDir = value;
            if (!sourceFileDir.substring(sourceFileDir.length()-1).equals(File.separator)) {
                sourceFileDir = sourceFileDir + File.separator;
            }
        }
        else if (orgKey.equalsIgnoreCase("TargetFileDir")) {
            targetFileDir = value;
            if (!targetFileDir.substring(targetFileDir.length()-1).equals(File.separator)) {
                targetFileDir = targetFileDir + File.separator;
            }
        }
        else if (orgKey.equalsIgnoreCase("SetLabelId")) {
            setLabelId = value;
        }
        else if (orgKey.equalsIgnoreCase("DeleteLabelId")) {
            deleteLabelId = value;
        }
        else if (orgKey.equalsIgnoreCase("SetTemplateId")) {
            setTemplateId = value;
        }
        else if (orgKey.equalsIgnoreCase("DeleteTemplateId")) {
            deleteTemplateId = value;
        }
        else if (orgKey.equalsIgnoreCase("SupportedFileExt")) {
            supportedFileExt = value.trim().toLowerCase();
        }
        else if (orgKey.equalsIgnoreCase("ProtectedFileExt")) {
            protectedFileExt = value.trim().toLowerCase();
        }
    }

}
