package org.itscool.commons.util;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
 * 日付情報管理クラス
 */
public class DateElement {
    /** 年 */
    private int year;
    /** 月 */
    private int month;
    /** 日 */
    private int day;
    /** 曜日 */
    private int yobi;
    /** 祝日判定フラグ */
    private boolean holiday;
    
    /***/
    public DateElement(){}
    
    public Date toDate(){
        Calendar cal = Calendar.getInstance();
        cal.clear();
        cal.set(Calendar.YEAR, year);
        cal.set(Calendar.MONTH, month-1);
        cal.set(Calendar.DAY_OF_MONTH, day);
        Date date = cal.getTime();
        return date;
    }
    
    /**
     * 日付情報を作成します
     * @param cal Calendarインスタンス
     * @param holiday 祝日フラグ
     */
    public DateElement(Calendar cal, boolean holiday){
        this.year = cal.get(Calendar.YEAR);
        this.month = cal.get(Calendar.MONTH)+1;
        this.day = cal.get(Calendar.DAY_OF_MONTH);
        this.holiday = holiday;
        this.yobi = cal.get(Calendar.DAY_OF_WEEK);
    }
    
    /**
     * 日付情報を作成します
     * @param year 年
     * @param month 月
     * @param day 日
     * @param holiday 祝日フラグ
     */
    public DateElement(int year, int month, int day, boolean holiday){
        this.year = year;
        this.month = month;
        this.day = day;
        this.holiday = holiday;
        
        Calendar cal = new GregorianCalendar();
        cal.clear();
        cal.set(Calendar.YEAR, year);
        cal.set(Calendar.MONTH, month-1);
        cal.set(Calendar.DAY_OF_MONTH, day);
        this.yobi = cal.get(Calendar.DAY_OF_WEEK);
    }
    
    /**
     * 指定日が今日か判定する
     * @return 今日ならtrueを返します
     */
    public boolean isToday(){
        Calendar cal = Calendar.getInstance();
        if( getYear() == cal.get(Calendar.YEAR) &&
            getMonth() == (cal.get(Calendar.MONTH)+1) &&
            getDay() == cal.get(Calendar.DAY_OF_MONTH)){
            return true;
        }else{
            return false;
        }
    }
    
    
    /**
     * 日を取得します
     * @return 日
     */
    public int getDay() {
        return day;
    }
    
    /**
     * 日を設定します
     * @param day 日
     */
    public void setDay(int day) {
        this.day = day;
    }
    
    /**
     * 祝日フラグを取得します
     * @return 祝日フラグ
     */
    public boolean isHoliday() {
        return holiday;
    }
    
    /**
     * 祝日フラグをセットします
     * @param holiday 祝日フラグ
     */
    public void setHoliday(boolean holiday) {
        this.holiday = holiday;
    }
    
    /**
     * 月を取得します
     * @return 月
     */
    public int getMonth() {
        return month;
    }
    
    /**
     * 月をセットします
     * @param month 月
     */
    public void setMonth(int month) {
        this.month = month;
    }
    
    /**
     * 年を取得します
     * @return 年
     */
    public int getYear() {
        return year;
    }
    
    /**
     * 年をセットします
     * @param year 年
     */
    public void setYear(int year) {
        this.year = year;
    }
    
    /**
     * 曜日を取得します
     * @return 曜日
     */
    public int getYobi() {
        return yobi;
    }
    
    /**
     * 曜日をセットします
     * @param yobi 曜日
     */
    public void setYobi(int yobi) {
        this.yobi = yobi;
    }
    
    /**
     * 曜日名を取得します
     * @return 曜日名
     */
    public String getYobiNa(){
        String yobiNa = "";
        
        switch(yobi){
            case Calendar.MONDAY:
                yobiNa = "月";
                break;
            case Calendar.TUESDAY:
                yobiNa = "火";
                break;
            case Calendar.WEDNESDAY:
                yobiNa = "水";
                break;
            case Calendar.THURSDAY:
                yobiNa = "木";
                break;
            case Calendar.FRIDAY:
                yobiNa = "金";
                break;
            case Calendar.SATURDAY:
                yobiNa = "土";
                break;
            default:
                yobiNa = "日";
                break;
        }
        
        return yobiNa;
    }
    
}
