package com.aimluck.eip.book;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.jar.Attributes;

import org.apache.turbine.util.RunData;
import org.apache.velocity.context.Context;

import com.aimluck.commons.field.ALDateTimeField;
import com.aimluck.eip.common.ALAbstractSelectData;
import com.aimluck.eip.common.ALDBErrorException;
import com.aimluck.eip.common.ALData;
import com.aimluck.eip.common.ALPageNotFoundException;
import com.aimluck.eip.modules.actions.common.ALAction;
import com.aimluck.eip.util.ALEipUtils;

public class BookSelectData extends ALAbstractSelectData implements ALData {

  /** <code>viewMonth</code> 開始年月 */
  private ALDateTimeField viewMonth;

  /** <code>prevMonth</code> 開始年月の前の月 */
  private ALDateTimeField prevMonth;

  /** <code>nextMonth</code> 開始年月の次の月 */
  private ALDateTimeField nextMonth;
  
  /** <code>viewMonth</code> 終了年月 */
  private ALDateTimeField viewMonth2;

  /** <code>prevMonth</code> 終了年月の前の月 */
  private ALDateTimeField prevMonth2;

  /** <code>nextMonth</code> 終了年月の次の月 */
  private ALDateTimeField nextMonth2;
  
  /** <code>currentMonth</code> 今月 */
  private ALDateTimeField currentMonth;
  
  public void init(ALAction action, RunData rundata, Context context)
      throws ALPageNotFoundException, ALDBErrorException {
    
    // 開始年月
    viewMonth = new ALDateTimeField("yyyy-MM");    
    // 開始年月の前の月
    prevMonth = new ALDateTimeField("yyyy-MM");
    // 開始年月の次の月
    nextMonth = new ALDateTimeField("yyyy-MM");
    // 今月
    currentMonth = new ALDateTimeField("yyyy-MM");
 
    // 終了年月
    viewMonth2 = new ALDateTimeField("yyyy-MM");   
    // 終了年月の前の月
    prevMonth2 = new ALDateTimeField("yyyy-MM");
    // 終了年月の次の月
    nextMonth2 = new ALDateTimeField("yyyy-MM");
    
    
    // 自ポートレットからのリクエストであれば、パラメータを展開しセッションに保存する。
    if (ALEipUtils.isMatch(rundata, context)) {
      // 開始年月
      if (rundata.getParameters().containsKey("view_month")) {
        ALEipUtils.setTemp(rundata, context, "view_month", rundata
            .getParameters().getString("view_month"));
      }
      
      // 終了年月
      if (rundata.getParameters().containsKey("view_month2")) {
        ALEipUtils.setTemp(rundata, context, "view_month2", rundata
            .getParameters().getString("view_month2"));
      }
    }

    // 開始年月
    String tmpViewMonth = ALEipUtils.getTemp(rundata, context, "view_month");
    if (tmpViewMonth == null || tmpViewMonth.equals("")) {
      Calendar cal = Calendar.getInstance();
      cal.set(Calendar.DATE, 1);
      cal.set(Calendar.HOUR_OF_DAY, 0);
      cal.set(Calendar.MINUTE, 0);
      viewMonth.setValue(cal.getTime());
    } else {
      viewMonth.setValue(tmpViewMonth);
      if (!viewMonth.validate(new ArrayList())) {
        ALEipUtils.removeTemp(rundata, context, "view_month");
        throw new ALPageNotFoundException();
      }
    }
    
    // 開始年月の次の月、前の月
    Calendar cal2 = Calendar.getInstance();
    cal2.setTime(viewMonth.getValue());
    cal2.add(Calendar.MONTH, 1);
    nextMonth.setValue(cal2.getTime());
    cal2.add(Calendar.MONTH, -2);
    prevMonth.setValue(cal2.getTime());
    
    // 終了年月
    String tmpViewMonth2 = ALEipUtils.getTemp(rundata, context, "view_month2");
    if (tmpViewMonth2 == null || tmpViewMonth2.equals("")) {
      Calendar cal3 = Calendar.getInstance();
      cal3.set(Calendar.DATE, 1);
      cal3.set(Calendar.HOUR_OF_DAY, 0);
      cal3.set(Calendar.MINUTE, 0);
      viewMonth2.setValue(cal3.getTime());
    } else {
      viewMonth2.setValue(tmpViewMonth2);
      if (!viewMonth2.validate(new ArrayList())) {
        ALEipUtils.removeTemp(rundata, context, "view_month2");
        throw new ALPageNotFoundException();
      }
    }
    
    // 終了年月の次の月、前の月
    Calendar cal4 = Calendar.getInstance();
    cal4.setTime(viewMonth2.getValue());
    cal4.add(Calendar.MONTH, 1);
    nextMonth2.setValue(cal4.getTime());
    cal4.add(Calendar.MONTH, -2);
    prevMonth2.setValue(cal4.getTime());
    
    
  }

  @Override
  protected Attributes getColumnMap() {
    // TODO 自動生成されたメソッド・スタブ
    return null;
  }

  @Override
  protected Object getResultData(Object obj) throws ALPageNotFoundException,
      ALDBErrorException {
    // TODO 自動生成されたメソッド・スタブ
    return null;
  }

  @Override
  protected Object getResultDataDetail(Object obj)
      throws ALPageNotFoundException, ALDBErrorException {
    // TODO 自動生成されたメソッド・スタブ
    return null;
  }

  @Override
  protected Object selectDetail(RunData rundata, Context context)
      throws ALPageNotFoundException, ALDBErrorException {
    // TODO 自動生成されたメソッド・スタブ
    return null;
  }

  @Override
  protected List selectList(RunData rundata, Context context)
      throws ALPageNotFoundException, ALDBErrorException {
    // TODO 自動生成されたメソッド・スタブ
    return null;
  }
  
  /**
   * 開始年月を取得します。
   * 
   * @return
   */
  public ALDateTimeField getViewMonth() {
    return viewMonth;
  }
  
  /**
   * 開始年月の前の月を取得します。
   * 
   * @return
   */
  public ALDateTimeField getPrevMonth() {
    return prevMonth;
  }

  /**
   * 開始年月の次の月を取得します。
   * 
   * @return
   */
  public ALDateTimeField getNextMonth() {
    return nextMonth;
  }

  /**
   * 今月を取得します。
   * 
   * @return
   */
  public ALDateTimeField getCurrentMonth() {
    return currentMonth;
  }

  /**
   * 終了年月を取得します。
   * 
   * @return
   */
  public ALDateTimeField getViewMonth2() {
    return viewMonth2;
  }
  
  /**
   * 終了年月の前の月を取得します。
   * 
   * @return
   */
  public ALDateTimeField getPrevMonth2() {
    return prevMonth2;
  }

  /**
   * 終了年月の次の月を取得します。
   * 
   * @return
   */
  public ALDateTimeField getNextMonth2() {
    return nextMonth2;
  }  
  
}
