package jp.agentec.sinaburocast.action.user;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Map;

import jp.agentec.sinaburocast.action.AbstractAction;
import jp.agentec.sinaburocast.common.SinaburoConstant;
import jp.agentec.sinaburocast.common.util.SinaburoUtil;
import jp.agentec.sinaburocast.dto.EnqResultDto;
import jp.agentec.sinaburocast.entity.Enquete;
import jp.agentec.sinaburocast.entity.Member;
import jp.agentec.sinaburocast.entity.Message;
import jp.agentec.sinaburocast.entity.PointPeriod;
import jp.agentec.sinaburocast.form.user.MyPageForm;
import jp.agentec.sinaburocast.service.EnqueteService;
import jp.agentec.sinaburocast.service.MemberService;
import jp.agentec.sinaburocast.service.MessageService;
import jp.agentec.sinaburocast.service.PointGetService;
import jp.agentec.sinaburocast.service.PointPeriodService;

import org.apache.log4j.Logger;
import org.seasar.struts.annotation.ActionForm;
import org.seasar.struts.annotation.Execute;

/**
 * マイページ
 *
 * @author kim-hs
 *
 */
public class MyPageAction extends AbstractAction {

	private final Logger logger = Logger.getLogger(getClass());

	public MemberService memberService;

	public MessageService messageService;

	public PointGetService pointGetService;

	public PointPeriodService pointPeriodService;

	public EnqueteService enqueteService;

	@ActionForm
	public MyPageForm myPageForm;

	/**
	 * 初期表示
	 *
	 * @return
	 * @throws ParseException
	 */
	@Execute(validator = false)
	public String index() throws ParseException {
		//Member memberInfoSession = (Member) session.getAttribute(AttrKey.AUTHENTICATED_TOKEN);
		Member memberInfoSession = getMember();

		if (memberInfoSession != null) {

			Integer memberId = memberInfoSession.memberId;

			Member memberInfo = memberService.findById(memberId);

			myPageForm.point = memberInfo.pointNum.toString();

			Map<String, Integer> lostPoint ;

			//ポイント有効期間
			//PointPeriod pointPeriod =pointPeriodService.findById(1);
			PointPeriod pointPeriod = pointPeriodService.findByOnRecode();

			Calendar now = Calendar.getInstance();
			Calendar now1 = Calendar.getInstance();
			Calendar now2 = Calendar.getInstance();

			SimpleDateFormat f = new SimpleDateFormat("yyyyMM");
			SimpleDateFormat f2 = new SimpleDateFormat("yyyyMMdd");

			now.add(Calendar.YEAR, -pointPeriod.pointPeriod);
			now1.add(Calendar.YEAR, -pointPeriod.pointPeriod);
			now1.add(Calendar.MONTH, 1);

			String startDay = f.format(now.getTime());
			String startDay1 = f.format(now1.getTime());

			String enqDay = f2.format(now2.getTime());

			lostPoint = pointGetService.findPointByMemberId(memberId, startDay,startDay1);

			if (lostPoint.get("point1") == null) {
				myPageForm.lostThisMonPoint = "0";
			} else {
				myPageForm.lostThisMonPoint = String.valueOf(lostPoint.get("point1"));
			}
			if (lostPoint.get("point2") == null) {
				myPageForm.lostNextMonPoint = "0";
			} else {
				myPageForm.lostNextMonPoint = String.valueOf(lostPoint.get("point2"));
			}

			//アンケートリスト作成
	    	List<Enquete> messageEnqueteList = enqueteService.findEnqueteByTypeEnquete(enqDay,SinaburoConstant.EnqueteType.EMONITOR);
			List<EnqResultDto> enqlist = new ArrayList<EnqResultDto>();

			for (int i = 0; i < messageEnqueteList.size(); i++) {

				Enquete list = messageEnqueteList.get(i);

				EnqResultDto dto = new EnqResultDto();
				dto.enqTitle = list.enqueteName;
				dto.enqId = String.valueOf(list.enqueteId);
				dto.startDay = SinaburoUtil.convertStringDateToFormat(list.startDate, "/");
				dto.endDay = SinaburoUtil.convertStringDateToFormat(list.endDate, "/");

				enqlist.add(dto);
			}

			if (messageEnqueteList.size() == 0) {
				Message info = messageService.findById(SinaburoConstant.MessageCode.ENQUETE);
				myPageForm.enqNoMessage = info.message;
			}

	    	//1%支援
	    	List<Enquete> messageDonationList = enqueteService.findEnqueteByType(enqDay,SinaburoConstant.EnqueteType.ORGANIZATION_CONTRIBUTE);
			List<EnqResultDto> enq1perlist = new ArrayList<EnqResultDto>();

			for (int i = 0; i < messageDonationList.size(); i++) {

				Enquete list = messageDonationList.get(i);

				EnqResultDto dto = new EnqResultDto();
				dto.enqTitle = list.enqueteName;
				dto.enqId = String.valueOf(list.enqueteId);
				dto.startDay = SinaburoUtil.convertStringDateToFormat(list.startDate, "/");
				dto.endDay = SinaburoUtil.convertStringDateToFormat(list.endDate, "/");

				enq1perlist.add(dto);
			}

			if (messageDonationList.size() == 0) {
				Message info = messageService.findById(SinaburoConstant.MessageCode.SUPPORT_SYSTEM);
				myPageForm.enq1PerNoMessage = info.message;
			}

	    	//お知らせ
	    	List<Message> messageNewsList = messageService.findByNews(SinaburoConstant.MessageCode.NEWS);

	    	session.setAttribute("newsList",messageNewsList);
	    	session.setAttribute("donationList",enq1perlist);
	    	session.setAttribute("enqueteList",enqlist);

		} else {
			return "/user/login/login.html";
		}
		return "/user/myPage/mypageTop.html";
	}

}