package com.eactive.ext.kjb.eai;

import lombok.Builder;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.validator.constraints.NotEmpty;

import javax.validation.constraints.Pattern;
import java.io.File;
import java.nio.file.Paths;

@Data
@Builder
@Slf4j
public class EaiBatchInterface {
    @Pattern(regexp = "^[a-zA-Z0-9]{13}$", message = "id는 12자리 영문대소문자 및 숫자 조합이어야 합니다.")
    private String id;

    @NotEmpty
    @Pattern(regexp = "^(?:[a-zA-Z]:\\\\|\\\\|\\/)(?:[\\w\\-\\.]+[\\\\\\/])*[\\w\\-\\.]+$", message = "sendDir은 절대경로로 지정되어야 합니다.")
    private String sendDir;

    @NotEmpty
    @Pattern(regexp = "^(?:[a-zA-Z]:\\\\|\\\\|\\/)(?:[\\w\\-\\.]+[\\\\\\/])*[\\w\\-\\.]+$", message = "backupDir은 절대경로로 지정되어야 합니다.")
    private String backupDir;

    @NotEmpty
    @Pattern(regexp = "^(?:[a-zA-Z]:\\\\|\\\\|\\/)(?:[\\w\\-\\.]+[\\\\\\/])*[\\w\\-\\.]+$", message = "errorDir은 절대경로로 지정되어야 합니다.")
    private String errorDir;


    public void moveError(String filename) {
        move(filename, errorDir);
    }

    public void moveBackup(String filename) {
        move(filename, backupDir);
    }

    private void move(String filename, String targetDir) {
        File file = Paths.get(sendDir, filename).toFile();
        File targetDirFile = new File(targetDir);
        File targetFile = new File(targetDir, file.getName());

        log.debug("송신파일 이동 시작 - {} -> {}", filename, targetDir);

        if (!file.exists()) {
            log.warn("송신 파일이 존재 하지 않습니다. ({})", file.getAbsolutePath());
            return;
        }

        if (!targetDirFile.exists()) {
            if (!targetDirFile.mkdirs()) {
                log.warn("대상 디렉토리 생성 실패 ({})", file.getAbsolutePath());
                return;
            }
        }

        if (!file.renameTo(targetFile)) {
            log.warn("송신 파일 이동 실패 - {}", targetFile.getAbsolutePath());
            return;
        }
    }
}
