package com.style24.admin.biz.dao;

import java.util.Collection;

import com.style24.core.support.annotation.ShopDs;
import com.style24.persistence.domain.Alarm;
import com.style24.persistence.domain.AlarmReceiver;
import com.style24.persistence.domain.Batch;
import com.style24.persistence.domain.BatchLog;
import com.style24.persistence.domain.CommonCode;
import com.style24.persistence.domain.Menu;
import com.style24.persistence.domain.MenuAccessHst;
import com.style24.persistence.domain.MenuRole;
import com.style24.persistence.domain.SampleFile;
import com.style24.persistence.domain.User;
import com.style24.persistence.domain.UserHst;
import com.style24.persistence.domain.UserMenu;

/**
 * 시스템 Dao
 *
 * @author gagamel
 * @since 2020. 10. 7
 */
@ShopDs
public interface TsaSystemDao {

	/**
	 * 사용자 목록
	 * @param user - 사용자 정보
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	Collection<User> getUserList(User user);

	/**
	 * 사용자 정보 조회
	 * @param userNo - 사용자번호
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	User getUser(Integer userNo);

	/**
	 * 사용자 삭제
	 * @param user - 사용자 정보
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	void deleteUser(User user);

	/**
	 * 사용자ID 건수 조회
	 * @param userId - 사용자ID
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	int getUserIdCount(String userId);

	/**
	 * 사용자 정보 저장 처리
	 * @param user - 사용자 정보
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	void saveUser(User user);

	/**
	 * 임시비밀번호 조회
	 * @param length - 비밀번호 자릿수
	 * @return
	 * @since 2020. 10. 7
	 */
	String getTemporaryPassword(int length);

	/**
	 * 사용자 비밀번호 수정
	 * @param user - 사용자 정보
	 * @since 2020. 10. 7
	 */
	void updateUserPassword(User user);

	/**
	 * 사용자 메뉴 목록
	 * @param userNo - 사용자번호
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	Collection<UserMenu> getUserMenuList(Integer userNo);

	/**
	 * 사용자정보변경이력 생성
	 * @param userHst - 사용자이력 정보
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	void createUserInfoChangeHistory(UserHst userHst);

	/**
	 * 메뉴 목록
	 * @param menu - 메뉴정보
	 * @return
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	Collection<Menu> getMenuList(Menu menu);

	/**
	 * 메뉴 등록/수정
	 * @param menu - 메뉴 정보
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	void saveMenu(Menu menu);

	/**
	 * 메뉴권한 삭제
	 * @param menuId - 메뉴ID
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	void deleteMenuRole(String menuId);

	/**
	 * 메뉴권한 생성
	 * @param menuRole - 메뉴권한 정보
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	void createMenuRole(MenuRole menuRole);

	/**
	 * 전체 사용자 메뉴 삭제
	 * @param menuRole - 메뉴권한 정보
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	void deleteAllUserMenu(MenuRole menuRole);

	/**
	 * 전체 사용자 메뉴 생성
	 * @param menuRole - 메뉴권한 정보
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	void createAllUserMenu(MenuRole menuRole);

	/**
	 * 사용자 전체 메뉴 삭제
	 * @param userNo - 사용자번호
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	void deleteUserAllMenu(Integer userNo);

	/**
	 * 사용자 전체 메뉴 생성
	 * @param user - 사용자 정보
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	void createUserAllMenu(User user);

	/**
	 * 사용자 메뉴 삭제
	 * @param userMenu - 사용자 메뉴 정보
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	void deleteAdminUserMenu(UserMenu userMenu);

	/**
	 * 사용자 메뉴 생성
	 * @param userMenu - 사용자 메뉴 정보
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	void createUserMenu(UserMenu userMenu);

	/**
	 * 공통코드 목록
	 * @param commoncode - 공통코드 정보
	 * @return 공통코드 목록
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	Collection<CommonCode> getCommonCodeList(CommonCode commoncode);

	/**
	 * 메뉴접속이력 생성
	 * @param menuAccessHst - 메뉴접속 정보
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	void createMenuAccessHistory(MenuAccessHst menuAccessHst);

	/**
	 * 공통코드 등록/수정
	 * @param commoncode - 공통코드 정보
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	void saveCommonCode(CommonCode commoncode);

	/**
	 * 공통코드 삭제
	 * @param commoncode - 공통코드 정보
	 * @author gagamel
	 * @since 2020. 10. 7
	 */
	void deleteCommonCode(CommonCode commoncode);

	/**
	 * 샘플파일 목록
	 * @return
	 * @author gagamel
	 * @since 2020. 11. 3
	 */
	Collection<SampleFile> getSampleFileList();

	/**
	 * 샘플파일 등록
	 * @param sampleFile - 샘플파일 정보
	 * @author gagamel
	 * @since 2020. 11. 3
	 */
	void createSampleFile(SampleFile sampleFile);

	/**
	 * 샘플파일 수정
	 * @param sampleFile - 샘플파일 정보
	 * @author gagamel
	 * @since 2020. 11. 3
	 */
	void updateSampleFile(SampleFile sampleFile);

	/**
	 * 알람 목록
	 * @param alarm - 알람 정보
	 * @return
	 * @author gagamel
	 * @since 2020. 11. 13
	 */
	Collection<Alarm> getAlarmList(Alarm alarm);

	/**
	 * 알람 저장
	 * @param alarm - 알람 정보
	 * @author gagamel
	 * @since 2020. 11. 13
	 */
	void createAlarm(Alarm alarm);

	/**
	 * 알람 수정
	 * @param alarm - 알람 정보
	 * @author gagamel
	 * @since 2020. 11. 13
	 */
	void updateAlarm(Alarm alarm);

	/**
	 * 알람 삭제
	 * @param alarm - 알람 정보
	 * @author gagamel
	 * @since 2020. 11. 13
	 */
	void deleteAlarm(Alarm alarm);

	/**
	 * 알람수신자 목록
	 * @param alarmId - 알람ID
	 * @return
	 * @author gagamel
	 * @since 2020. 11. 13
	 */
	Collection<AlarmReceiver> getAlarmReceiverList(String alarmId);

	/**
	 * 알람수신자 저장
	 * @param alarmReceiver - 알람수신자 정보
	 * @author gagamel
	 * @since 2020. 11. 13
	 */
	void saveAlarmReceiver(AlarmReceiver alarmReceiver);

	/**
	 * 알람수신자 삭제
	 * @param alarmReceiver - 알람수신자 정보
	 * @author gagamel
	 * @since 2020. 11. 13
	 */
	void deleteAlarmReceiver(AlarmReceiver alarmReceiver);

	/**
	 * 배치 목록
	 * @param batch - 배치 정보
	 * @return
	 * @author gagamel
	 * @since 2020. 12. 2
	 */
	Collection<Batch> getBatchList(Batch batch);

	/**
	 * 배치 생성
	 * @param batch - 배치 정보
	 * @author gagamel
	 * @since 2020. 12. 2
	 */
	void saveBatch(Batch batch);

	/**
	 * 배치 로그 목록
	 * @param batch - 배치 정보
	 * @return
	 * @author gagamel
	 * @since 2020. 12. 3
	 */
	Collection<BatchLog> getBatchLogList(Batch batch);

}
