package com.style24.batch.biz.service;

import java.util.Collection;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.style24.batch.biz.dao.TsbOrderDao;
import com.style24.persistence.domain.Order;

import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;

/**
 * 포인트 Service
 *
 * @author xodud1202
 * @since 2021. 05. 04
 */
@Service
@Slf4j
public class TsbOrderService {

	@Autowired
	private TsbOrderDao orderDao;

	/**
	 * 무통장입금 입금기한 만료 주문 조회
	 *
	 * @return Collection<Order>
	 * @author xodud1202
	 * @since  2021. 05. 03
	 */
	public Collection<Order> getOrderDepositExpirationList() {
		return orderDao.getOrderDepositExpirationList();
	}

	/**
	 * 선물하기 배송지 등록 기간 만료 주문 취소
	 *
	 * @return Collection<Order>
	 * @author xodud1202
	 * @since  2021. 05. 03
	 */
	public Collection<Order> getOrderGiftExpirationList() {
		return orderDao.getOrderGiftExpirationList();
	}

	/**
	 * 무통장입금 만료대기자 리스트 조회
	 * @return Collection<Order>
	 * @author xodud1202
	 * @since  2021. 07. 13
	 */
	public Collection<Order> getOrderDepositWaitingCustomerList() {
		return orderDao.getOrderDepositWaitingCustomerList();
	}

	/**
	 * 네이버페이 결제형 구매확정 대상 리스트 조회
	 * 
	 * @return Collection<Order>
	 * @author card007
	 * @since 2021. 09. 23
	 */
	public Collection<Order> getNaverPayOrderDecisionList() { return orderDao.getNaverPayOrderDecisionList(); }

	/**
	 * 네이버페이 결제형 구매확정 여부 수정
	 *
	 * @param Order
	 * @return int
	 * @author card007
	 * @since 2021. 09. 23
	 */
	public int updateNaverPayOrderDecision(Order order) { return orderDao.updateNaverPayOrderDecision(order); }

	/**
	 * 구매확정 대상 임시테이블 생성
	 * @return Collection<Order>
	 * @author yujung
	 * @since 2021. 10. 01
	 */
	@Transactional("shopTxnManager")
	public int createTempBuyConfirmData() {
		// drop 테이블
		//orderDao.deleteTempBuyConfirmData();

		// create tmp 테이블
		orderDao.createTableBuyConfirmDataTmp();

		// tmp 테이블 테이터 생성
		int result = orderDao.createTempBuyConfirmData();

		return result;
	}

	/**
	 * 구매확정 임시테이블 명 변경
	 * @return Collection<Order>
	 * @author yujung
	 * @since 2021. 10. 01
	 */
	@Transactional("shopTxnManager")
	public void renameTempBuyConfirmData() {
		// 테이블명 DataBak -> Data 변경
		//orderDao.renameBuyConfirmDataBakToData();

		// 테이블명 Data -> DataTmp 변경
		//orderDao.renameBuyConfirmDataToTmp();
	}

	/**
	 * 구매확정 상태 변경
	 * @return Collection<Order>
	 * @author yujung
	 * @since 2021. 10. 01
	 */
	@Transactional("shopTxnManager")
	public int cahgneStatButConfirm() {
		log.info("2. 구매확정 상태변경");

		// 주문상세 상태 변경
		int insertDetailCnt = orderDao.updateOrderDetailStatBuyConfirm();
		log.info("2-1. 주문상세 구매확정 상태변경 건 : {}", insertDetailCnt);

		// 주문상세 이력 생성
		int insertHstCnt = orderDao.createOrderDetailHstBuyConfirm();
		log.info("2-2. 구매확정 상태이력 생성 건 : {}", insertHstCnt);

		// 주문상세단품 상태 변경
		int updateItemCnt = orderDao.updateOrderDetailItemStatBuyConfirm();
		log.info("2-3. 주문상세단품 구매확정 상태변경 건 : {}", updateItemCnt);

		return updateItemCnt;
	}
}
