/**
 *
 */
package jp.agentec.sinaburocast.csv;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import jp.agentec.sinaburocast.common.SinaburoConstant;
import jp.agentec.sinaburocast.entity.Member;
import jp.agentec.sinaburocast.service.MemberService;

import org.seasar.framework.util.StringUtil;
import org.seasar.s2csv.csv.annotation.CSVValidator;
import org.seasar.s2csv.csv.annotation.column.CSVColumn;
import org.seasar.s2csv.csv.annotation.column.CSVRequired;
import org.seasar.s2csv.csv.annotation.entity.CSVEntity;

/**
 * @author choi-c
 *
 */

@CSVEntity(header=true,demiliter='\t',headerCheck=false,columnCountCheck=false)
public class PointMigrationInfoCsv extends AbstractCsv {

	
	public MemberService memberService;
	private int checkMemberId;
	//ポイント付与日時	区分	付加情報	会員ID	メールアドレス	付与ポイント
	@CSVValidator(msgKey = "errors.pointDay", method = "validatePointGetDate")
	@CSVColumn(columnIndex = 0, columnName = "ポイント付与日時")
	public String pointGetDateInput;
	public String pointGetDate;
	
	
	
	@CSVColumn(columnIndex = 1, columnName = "区分")
	public String dummy1;
	
	
	@CSVColumn(columnIndex = 2, columnName = "付加情報")
	public String dummy2;
	
	@CSVValidator(msgKey = "errors.memberId2", method = "validateMemberId")
	@CSVColumn(columnIndex = 3, columnName = "会員ID")
	public String memberId;
	
	
	@CSVColumn(columnIndex = 4, columnName = "メールアドレス")
	public String dummy3;
	
	@CSVRequired
	@CSVColumn(columnIndex = 5, columnName = "付与ポイント")
	public String pointGetNum;
	
	
	@CSVColumn(columnIndex = 6, columnName = "結果")
	public String okNg = "OK";

	@CSVColumn(columnIndex = 7, columnName = "理由")
	public String reason = "reason";
	
	@CSVColumn(columnIndex = 8, columnName = "登録結果")
	public String insertResult = "OK";
	
	
	public Integer pointUseNum=0;	
	public Integer validFlg = SinaburoConstant.ValidFlg.VALID;
	
	
	
	
	
	public boolean validatePointGetDate(String args) {
		Date date = null;
		SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
		if(StringUtil.isBlank(args))
			return true;
		format.setLenient(false);
		
		try {
			date=format.parse(args);
		} catch (ParseException e) {
			return false;
		}
		format = new SimpleDateFormat("yyyyMMdd");
		pointGetDate=format.format(date);
		return true;	
	}
	
	
	public boolean isValidMemberId=false;

	public boolean validateMemberId(String args) {

		if (!StringUtil.equals(args, "")) {
			checkMemberId = Integer.parseInt(args);
		}
		isValidMemberId=validateLoginId(args);
		return isValidMemberId; 
	}

	@SuppressWarnings("unused")
	public boolean validateLoginId(String args) {

		Member memberInfo = null;

		if(StringUtil.isBlank(args)) return true;

		memberInfo = memberService.findById(Integer.parseInt(args));
		if (memberInfo == null) {return false;}
		if (memberInfo != null) {
			if (StringUtil.isBlank(args)) {
				return false;
			}
			if(memberInfo.memberId.equals(checkMemberId)) {
				return true;
			}
			return false;
		}
		return true;
	}
	
		
	
	
	
}