package com.style24.admin.biz.service;

import java.util.Collection;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.style24.admin.biz.dao.TsaNoticeDao;
import com.style24.admin.support.security.session.TsaSession;
import com.style24.persistence.domain.Notice;

import lombok.extern.slf4j.Slf4j;

/**
 * 공지사항 Service
 *
 * @author gagamel
 * @since 2020. 10. 30
 */
@Service
@Slf4j
public class TsaNoticeService {

	@Autowired
	private TsaNoticeDao noticeDao;

	/**
	 * 공지사항 목록
	 * @param notice - 공지사항 정보
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 30
	 */
	public Collection<Notice> getNoticeList(Notice notice) {
		return noticeDao.getNoticeList(notice);
	}

	/**
	 * 공지사항 수신자 목록
	 * @param noticeSq - 공지사항일련번호
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 30
	 */
	public Collection<Notice> getNoticeReceiverList(Integer noticeSq) {
		return noticeDao.getNoticeReceiverList(noticeSq);
	}

	/**
	 * 공지사항 파일 목록
	 * @param noticeSq - 공지사항일련번호
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 30
	 */
	public Collection<Notice> getNoticeFileList(Integer noticeSq) {
		return noticeDao.getNoticeFileList(noticeSq);
	}

	/**
	 * 공지사항 저장
	 * @param notice - 공지사항 정보
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 30
	 */
	@Transactional("shopTxnManager")
	public void saveNotice(Notice notice) {
		notice.setRegNo(TsaSession.getInfo().getUserNo());
		notice.setUpdNo(TsaSession.getInfo().getUserNo());

		// 신규 일때
		if (notice.getNoticeSq() == null) {
			// 공지사항 저장
			noticeDao.createNotice(notice);

			// 등록된 사용자번호 값 가져오기
			Integer noticeSq = notice.getNoticeSq();
			log.info("noticeSq: {}", noticeSq);
			notice.setNoticeSq(noticeSq);
		} else {
			// 공지사항 수정
			noticeDao.updateNotice(notice);
		}

		// 수신자 저장
		if (!StringUtils.isAllBlank(notice.getReceiverIds())) {
			noticeDao.deleteNoticeReceiver(notice);

//			for (int i = 0; i < notice.getReceiverIds().length; i++) {
			for (String receiverId : notice.getReceiverIds()) {
				if (StringUtils.isNotBlank(receiverId)) {
					notice.setReceiverId(receiverId);
					log.info("noticeReceiver: {}", notice);
					noticeDao.createNoticeReceiver(notice);
				}
			}
		}

		// 파일이 존재할때
		if (!StringUtils.isAllBlank(notice.getSysFileNms())) {
			noticeDao.deleteNoticeFile(notice);

			for (int i = 0; i < notice.getFileCnt(); i++) {
				notice.setOrgFileNm(notice.getOrgFileNms()[i]);
				notice.setSysFileNm(notice.getSysFileNms()[i]);
				log.info("noticeFile: {}", notice);
				noticeDao.createNoitceFlie(notice);
			}
		}
	}

	/**
	 * 공지사항 첨부파일 삭제
	 * @param notice - 공지사항 정보
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 30
	 */
	@Transactional("shopTxnManager")
	public void deleteNoticeFile(Notice notice) {
		noticeDao.deleteNoticeFile(notice);
	}

	/**
	 * 공지사항 등록(상품상세공지에서 사용)
	 * @param notice - 공지사항 정보
	 * @return
	 * @author eskim
	 * @since 2020. 11. 05
	 */
	@Transactional("shopTxnManager")
	public void createNotice(Notice notice) {
		noticeDao.createNotice(notice);
	}

	/**
	 * 공지사항 수정(상품상세공지에서 사용)
	 * @param notice - 공지사항 정보
	 * @return
	 * @author eskim
	 * @since 2020. 11. 05
	 */
	@Transactional("shopTxnManager")
	public void updateNotice(Notice notice) {
		noticeDao.updateNotice(notice);
	}



}
