package com.style24.persistence.domain;

import java.util.Collection;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.style24.core.support.util.MaskingUtils;
import com.style24.persistence.TscBaseDomain;
import com.style24.persistence.TscPageRequest;

import lombok.Data;

/**
 * 기획전 Domain
 *
 * @author sowon
 * @since 2021. 02. 04
 */

@SuppressWarnings("serial")
@Data
public class Plan extends TscBaseDomain {

	// 기획전
	private Integer planSq;			//기획전일련번호(SeqPlan sequence)
	private String planNm;			//기획전명
	private String planGb;			//기획전구분(P:기획전, E:이벤트)
	private Integer custNo;			//고객번호
	private String custGb;			//고객구분
	private String custGrade;		//회원등급
	private String planSnm;			//검색어
	private String templateType;	//템플릿유형(H:Html, T:텍스트)
	private String siteCd;			//사이트코드(공통코드g000)
	private String frontGb;			//프론트구분(A:All, P:웹, M:모바일)
	private String dispStdt;		//기획전 시작일시
	private String dispEddt;		//기획전 종료일시
	private String mainImg;			//메인이미지
	private String mainPimg;		//메인이미지(Pc)
	private String mainMimg;		//메인이미지(모바일)
	private String dtlPimg;			//상세이미지(Pc)
	private String dtlMimg;			//상세이미지(모바일)
	private String orgMainPimg;		//원본메인이미지(Pc)
	private String orgMainMimg;		//원본메인이미지(모바일)
	private String orgDtlPimg;		//원본상세이미지(Pc)
	private String orgDtlMimg;		//원본상세이미지(모바일)
	private String orgMainPimgDelYn;//원본메인이미지(Pc) 삭제여부
	private String orgMainMimgDelYn;//원본메인이미지(모바일) 삭제여부
	private String orgDtlPimgDelYn;	//원본상세이미지(Pc) 삭제여부
	private String orgDtlMimgDelYn;	//원본상세이미지(모바일) 삭제여부
	private String dtlTitle1;		//상세제목1
	private String dtlTitle2;		//상세제목2
	private String cateCd;			//카테고리코드(대/중/소/세카테고리)
	private String cateDispYn;		//카테고리전시여부(Y:전시)
	private String replyYn;			//댓글여부(Y:댓글)
	private String replyLoc;		//댓글위치(U:상품리스트상단 D:상품리스트하단)
	private String replyImg;		//댓글이미지
	private String orgReplyImg;		//원본댓글이미지
	private String replyTitle1;		//댓글제목1
	private String replyTitle2;		//댓글제목2
	private String devUrl;			//호출 URL
	private String orgReplyImgDelYn;//원본댓글이미지 삭제여부
	private String cornerNmDispYn;	//코너명노출여부(Y:노출)
	private String goodsLimitYn;	//상품등록제한여부(Y:상품등록제한)
	private String goodsLimitQty;	//상품등록제한수(상품등록제한여부가 "Y"일 떄)
	private String delYn;			//삭제여부(Y:삭제)
	private String openYn;			//오픈여부(Y:오픈)
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	private long[] dispOrdArr;		//표시순서 배열
	private long dispOrd;			//표시순서
	private long readCnt;			//조회수
	private Integer pollSq;			//투표일련번호
	private String badgeNm;			//뱃지이름
	private String badgeFcolor;		//뱃지글자컬러
	private String badgeBcolor;		//뱃지배경컬러
	private String privacyPolicy;	//개인정보수집동의정책

	// 기획전 소스
	private Integer seq;			//일련번호
	private String fsrcPc;			//프론트소스(pc)	/ 화면용
	private String fsrcMob;			//프론트소스(모바일)	/ 화면용
	private String locGb;			//위치구분(T:상단 / B:하단)

	// 기획전 상세
	private Integer planDtlSq;		//기획전상세일련번호(SEQ_PLAN_DTL sequence)
	private Integer copyPlanDtlSq;	//복사할 상세 일련번호
	private Integer copyPlanSq;		//복사할 일련번호
	private String copyMode;		//복사 선택(CORNER:코너복사, PLAN:기획전복사)
	private String cornerDispType;	//코너노출유형(공통코드G045) (2:2컷 , 3:3컷, 4:4컷)
	private String cornerNm;		//코너 명
	private String planDtlStat;		//기획전상세상태(공통코드G044)
	private String copyBrandCd;		//복사할 브랜드코드
	private String adminPreview;	// 어드민미리보기 여부 (Y:미리보기)
	private String dispDt;			// 기획전 기간
	private String viewDt;			// 미리보기 일시
	private String preview;			// 미리보기 여부 (Y:미리보기)
	private Integer attachSq;
	private String brandNm;

	// 기획전 브랜드
	private Integer brandGroupNo;	//기획전브랜드그룹번호
	private String DispYn;      	//표시여부           
	private String brandGroupKnm; 	//브랜드 그룹명(한글)
	private String brandGroupEnm; 	//브랜드 그룹명(영어)
	/* Multi CheckBox 항목*/
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	private String[] multiBrand;
	private String[] multiCate;

	// 코너
	private String cateGb;			// 카테고리구분
	private String cateNm;			// 카테고리명
	private Integer cateNo;			// 카테고리번호
	private String brandGroupNm;	// 브랜드 그룹 이름
	private String colorChips;
	private String icon;

	// 고객등급
	private String custGradeName;	// 접근가능고객 등급 네임

	// 기획전 응모
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	private String[] planQtitle;
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	private String[] attachYn;
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	private String[] planAnswerSq;
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	private String[] answer;
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	//private String[] sysFileNm;

	//private Collection<TsaPlanQuestAnswer> planQuestAnswerList; // 고시항목

	// 검색
	private String startSearchDate;		// 진행기간 시작일
	private String startSearchTime;		// 진행기간 시작시간
	private String endSearchDate;		// 진행기간 종료일
	private String endSearchTime;		// 진행기간 종료시간
	private String excelFileNm;			// 엑셀 파일 명
	//private int startRow;				// 페이징 시작
	//private int endRow;					// 피이징 종료
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	private String[] siteCds;			// 사이트

	// 코너 상품
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	private String[] goodsCdArr;		// 상품 코드 배열
	private String goodsCd;				// 상품 코드
	private String goodsNm;				// 상품 명
	private String goodsTnm;			// 상품 타이틀 명
	private String goodsStat;			// 제품상태
	private String imgType;				// 이미지 타입
	private String imgPath1;			// 이미지 경로1
	private String imgPath2;			// 이미지 경로2
	private String imgPath4;			// 이미지 경로4
	private String imgPath5;			// 이미지 경로5
	private String imgPath6;			// 이미지 경로6
	private float dcRate;				// 할인율
	private int listPrice;			// 최소 소비자가
	private int tagPrice;			// tag 가
	private int currPrice;			// 판매가
	private String supplyCompCd;		// 업체코드
	private String supplyCompNm;		// 업체명
	private String formalGb;			// 정상/이월 여부
	private int currStockQty;		// 재고
	private String pageYn;				// 페이징 사용 여부
	private String changeGb;			// 순서변경 updown 구분
	private int stockQtySum;			// 재고
	private String afLinkCd;			// 제휴채널
	private String afChannel;			// 제휴채널 공통코드
	private String afLinkNm;			// 제휴채널 명

	// 기획전 팝업
	private String callBackFun;			// 콜백함수명
	private String popupDispStdt;		//기획전 시작일시
	private String popupDispEddt;		//기획전 종료일시

	//기획전 템플릿
	private Integer planContSq;			// 기획전 컨텐츠 일련번호
	private String tmplType;			//템플릿 유형(공통코드 G082)
	private String title;				//타이틀
	private String linkUrl;				//링크url
	private String dispYn;				//표시여부
	private Integer planContItemSq;		//기획전 컨텐프 아이템 일련번호
	private String itemVal;				//아이템값(상품코드, 이미지파일명 등)
	private String reviewDispStdt;		//리뷰노출시작일시
	private String reviewDispEddt;		//리뷰노툴종료일시
	private String linkOpenGb;			//링크 본창 새창
	private String cpnNote0;
	private String cpnNote1;
	private String cpnNote2;
	private String cpnNote3;
	private String cpnNote4;
	private String cpnNote5;
	private String cpnNote6;
	private String cpnNote7;
	private String cpnNote8;
	private String cpnNote9;
	
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	private String[] multiPlanReview;		//리뷰상품목록
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	private String[] multiPlanReviewStartD;		//리뷰시작날짜
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	private String[] multiPlanReviewStartT;		//리뷰시작시간
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	private String[] multiPlanReviewEndD;		//리뷰종료날짜
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	private String[] multiPlanReviewEndT;		//리뷰종료시간
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	private String[] multiPlanCoupon;		//쿠폰목록
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	private String[] multiPlanFile;			//이미지목록
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	private String[] multiChannel;			//제휴채널목록

	// 템플릿 저장하기 위한 임시 변수
	private String reTitle;				//리뷰타이틀
	private String mode;				//모드
	private long reDispOrd;				//리뷰전시순서
	private String reItemVal;			//리뷰아이템
	private String reDispYn;			//리뷰전시여부
	private String reItemNm;			//리뷰상품이름
	private Integer rePlanContSq;		//리뷰 컨텐츠일련번호
	private String planStat;

	private String cuTitle;				//쿠폰타이틀
	private long cuDispOrd;				//쿠폰전시순서
	private String cuDispYn;			//쿠폰전시여부
	private String cuItemVal;			//쿠폰 아이템
	private String cuItemNm;			//쿠폰 아이템 이름
	private Integer cuPlanContSq;		//쿠폰 컨텐츠일련번호

	private String fileItemVal;			//파일아이템
	private String fileDispYn;			//파일전시여부
	private long fileDispOrd;			//파일전시순서
	private Integer filePlanContSq;		//파일 컨텐츠일련번호

	private String topFsrcDispYn;		//html상단 전시여부
	private String BtmFsrcDispYn;		//html하단 전시여부
	private long topFsrcDispOrd;		//html상단 전시순서
	private long btmFsrcDispOrd;		//html하단 전시순서
	private String fsrcPcTop;			//html상단 내용(pc)
	private String fsrcMobileTop;	    //html상단 내용(mobile)
	private String fsrcPcBtm;			//html하단 내용(pc)
	private String fsrcMobileBtm;		//html하단 내용(pc)

	private String goodsTitle;			//상품타이틀
	private String goodsUrl;			//상품 url
	private String goodsDispYn;			//상품전시여부
	private long goodsDispOrd;			//상품 전시순서
	private String goodsType;			//상품노출순서
	private String goodsItemVal;		//상품아이템
	private String brandEnm;			//브랜드명
	private Integer goodsPlanContSq;	//상품 컨텐츠일련번호

	private String brand;				// 기획전 리스트 (브랜드 명 외)
	private String newYn;				// 기획전 신규여부
	private int endDays;				// 종료임박일수
	private int cnt;					// 기획전 브랜드 카운트;
	private String brandKnm;

	private String sysImgNm;			// 상품 이미지
	
	
	// 출석체크 주
	private String sun;			//일요일
	private String mon;			//월요일
	private String tue;			//화요일
	private String wed;			//수요일
	private String thu;			//목요일
	private String fri;			//금요일
	private String sat;			//토요일
	
	// 이벤트 참여
	private Integer entryCustNo;		//참여자 고객번호
	private String entryDt;				//참여일시
	private String entryVal1;			//참여값1
	private String entryVal2;			//참여값2
	private String entryVal3;			//참여값3
	private String entryVal4;			//참여값4
	private String entryVal5;			//참여값5
	private String entryVal6;			//참여값6
	private String entryVal7;			//참여값7
	private String entryVal8;			//참여값8
	private Integer planEntrySq;		//참여일련번호
	private Integer planEntryAtSq;
	private String orgFileNm;
	private String sysFileNm;
	private String entryAllYn;
	private int basDays;
	private String benefitGb;
	private int pntAmt;
	private Integer cpnId;
	private String cpnNm;
	private String dcWay;
	private int dcVal;
	private int pntUsableDay;		//포인트사용가능일
	
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	private String[] multiReplyOrgFile;			//댓글 이미지
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	private String[] multiReplySysFile;			//댓글 이미지
	
	// Pagination
	private TscPageRequest pageable;
	private int pageNo = 1;
	private int pageSize = 10;
	private int pageUnit = 10;
	
	private TscPageRequest pageable2;
	private int pageNo2 = 1;
	private int pageSize2 = 6;
	private int pageUnit2 = 10;

	private String condition; // 키워드 종류
	private String search; // 검색어
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	private String[] conditionList;

	// 사용가능고객등급
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	private String[] usableCustGradeArr;

	// 사용가능고객구분
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	private String[] usableCustGbArr;
	
	// 프론트구분
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	private String[] frontGbArr;
	
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	List<Plan> multiPlanGoodsContent1;
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	List<Plan> multiPlanGoodsContent2;
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	List<Plan> multiPlanGoodsContent3;
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	List<Plan> multiPlanGoodsContent4;
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	List<Plan> multiPlanGoodsContent5;
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	List<Plan> multiPlanGoodsContent6;
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	List<Plan> multiPlanGoodsContent7;
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	List<Plan> multiPlanGoodsContent8;
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	List<Plan> multiPlanGoodsContent9;
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	List<Plan> multiPlanGoodsContent10;

	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	List<Plan> multiPlanGoodsContentVal1;
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	List<Plan> multiPlanGoodsContentVal2;
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	List<Plan> multiPlanGoodsContentVal3;
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	List<Plan> multiPlanGoodsContentVal4;
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	List<Plan> multiPlanGoodsContentVal5;
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	List<Plan> multiPlanGoodsContentVal6;
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	List<Plan> multiPlanGoodsContentVal7;
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	List<Plan> multiPlanGoodsContentVal8;
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	List<Plan> multiPlanGoodsContentVal9;
	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
	List<Plan> multiPlanGoodsContentVal10;

	Collection<Plan> planningGoodsList;	//베너별 상품목록

	private String likeIt;			// 위시리스트담은상품
	private int maxRow;				// 최대ROW수
	private Integer exceptPlanSq;	// 제외할기획전번호
	private String custId;			// 고객ID
	// Masking
	public String getMaskingCustId() {
		return (this.custId != null) ?  MaskingUtils.id(this.custId) : this.custId;
	}
		

}
