package cokr.xit.ens.batch.sched;

import cokr.xit.ens.core.aop.EnsResponseVO;
import cokr.xit.ens.modules.common.ctgy.intgrnnoti.service.IntgrnNotiService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Profile;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.List;

@Slf4j
@Component
@Profile("!local & !local-maria & !local-oracle & !local-test")
@RequiredArgsConstructor
public class EnsIntgrnScheduler {

    private final IntgrnNotiService intgrnNotiService;

    /**
     * 통합고지 재전송 처리
     * -. 전송회차가 완료되지 않은 모든 자료에 대해 전송을 수행 한다.
     */
    @Scheduled(cron = "0 */10 9-18 * * *")
    public void resended() {
        EnsResponseVO responseVO = intgrnNotiService.sendBulkAll();
        StringBuffer sb = new StringBuffer();
        sb.append("\n=======================================================")
                .append("\n[ENS INTGRN] 통합고지 재전송처리")
                .append("\n결과: {}")
                .append("\n=======================================================");
        log.info(sb.toString(), responseVO.toString());
    }


    /**
     * 통합고지 상태갱신 처리
     * -. "실패(~fail) 또는 만료(close) 외" 상태의 자료에 대해 문서상태를 갱신 한다.
     * -. 문서상태는 현재 상태에 따라 "전송완료(sendcmplt) 또는 열람중(open)"으로 갱신 된다.
     */
    @Scheduled(cron = "0 0 23 * * *")
    public void fetched() {
        EnsResponseVO responseVO = intgrnNotiService.statBulkAll();
        StringBuffer sb = new StringBuffer();
        sb.append("\n=======================================================")
                .append("\n[ENS INTGRN] 통합고지 문서상태갱신 처리")
                .append("\n결과: {}")
                .append("\n=======================================================");
        log.info(sb.toString(), responseVO.toString());
    }


    /**
     * 마감처리
     * -. "열람(open)" 상태의 자료 중 마감기한이 경과한 자료의 상태정보를 "마감(close)" 으로 변경 한다.
     */
    @Scheduled(cron = "30 0 9-18 * * *")
    public void closed() {
        EnsResponseVO<List<Long>> responseVO = intgrnNotiService.closed();
        StringBuffer sb = new StringBuffer();
        sb.append("\n=======================================================")
                .append("\n[ENS INTGRN] 통합고지 마감처리 - 총 {}건")
                .append("\nIntSendMastId {}")
                .append("\n=======================================================");
        log.info(sb.toString(), responseVO.getResultInfo().size(), responseVO.getResultInfo().toString());
    }


}
