package cn.edu.zstu.sunshine.utils;

import android.support.v4.content.ContextCompat;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;

import com.orhanobut.logger.Logger;

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

import cn.edu.zstu.sunshine.R;
import cn.edu.zstu.sunshine.base.BaseApplication;

/**
 * 日期、时间的工具类
 * Created by CooLoongWu on 2017-8-15 16:23.
 */

public class DateUtil {

    public static String week[] = {"周一", "周二", "周三", "周四", "周五", "周六", "周日"};

    public static long getMillis(String dataStr) {
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
        try {
            Date date = df.parse(dataStr);
            calendar.setTime(date);
            return calendar.getTimeInMillis();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return 0;
    }

    /**
     * @return 当前月份【1月就是1】
     */
    public static int getCurrentMonth() {
        return Calendar.getInstance().get(Calendar.MONTH) + 1;
    }

    /**
     * @return 当前年份
     */
    public static int getCurrentYear() {
        return Calendar.getInstance().get(Calendar.YEAR);
    }

    /**
     * 从字符串中获取年份【字符串形式类似2017-09-29 xx(后面无所谓)】
     *
     * @param dataStr 日期时间字符串
     * @return 年份(0代表解析错误的年份)
     */
    public static int getYearFromString(String dataStr) {
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
        try {
            Date date = df.parse(dataStr);
            calendar.setTime(date);
            return calendar.get(Calendar.YEAR);
        } catch (ParseException e) {
            e.printStackTrace();
            return 0;
        }
    }

    /**
     * 从字符串中获取月份【字符串形式类似2017-09-29 xx(后面无所谓)】
     *
     * @param dataStr 日期时间字符串
     * @return 月份(1月就是1,0代表解析错误的月份)
     */
    public static int getMonthFromString(String dataStr) {
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
        try {
            Date date = df.parse(dataStr);
            calendar.setTime(date);
            return calendar.get(Calendar.MONTH) + 1;
        } catch (ParseException e) {
            e.printStackTrace();
            return 0;
        }
    }

    /**
     * @return 彩色的月份信息
     */
    public static SpannableString getMonthString() {
        String month = String.format(BaseApplication.getAppContext().getResources().getString(R.string.month), getCurrentMonth());
        return getColorText(month, R.color.text_yellow, 0, month.length() - 1);
    }

    /**
     * @return 当前校历中当前的周数
     */
    public static int getWeek() {
        return 0;
    }

    public static SpannableString getWeekString() {
        String week = "第6周";
        return getColorText(week, R.color.text_yellow, 1, week.length() - 1);
    }


    /**
     * @return 今天是本周第几天(注:周一是1)
     */
    public static int getDayOfWeek() {
        Calendar calendar = Calendar.getInstance();
        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
        if (dayOfWeek == 0)
            dayOfWeek = 7;
        Logger.e("日期,周" + dayOfWeek);
        return dayOfWeek;
    }

    /**
     * @return 本周包含的日期
     */
    public static int[] getDatesOfWeek() {
        int date[] = new int[7];
        Calendar calendar = Calendar.getInstance();
        while (calendar.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY) {
            calendar.add(Calendar.DATE, -1);
        }
        for (int i = 0; i < 7; i++) {
            calendar.add(Calendar.DATE, 1);
            date[i] = calendar.get(Calendar.DATE);
        }
        return date;
    }

    /**
     * 修改一段String中某些字符串为彩色
     *
     * @param string 要修改的字符串
     * @param color  颜色
     * @param start  开始位置
     * @param end    结束为止
     * @return 修改后的字符串
     */
    private static SpannableString getColorText(String string, int color, int start, int end) {
        SpannableString sp = new SpannableString(string);
        sp.setSpan(new ForegroundColorSpan(ContextCompat.getColor(BaseApplication.getAppContext(), color)), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        return sp;
    }
}