package com.rc.core.util

import android.text.TextUtils
import java.text.DateFormat
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*

/**
 * info
 *
 * @author ReiChin_
 */
object DateUtils {

    /**
     * 比较两个日期的年月日
     * @param c1
     * @param c2
     * @return c1 > c2 返回 1;
     * c1 = c2 返回 0;
     * c1 < c2 返回 -1
     */
    fun compareToYMD(c1: Calendar?, c2: Calendar?): Int {
        if (null == c1 || null == c2) {
            return 0
        }
        clearTime(c1)
        clearTime(c2)
        return c1.compareTo(c2)
    }

    /**
     * 重置时、分、秒、毫秒
     */
    private fun clearTime(calendar: Calendar) {
        calendar[Calendar.HOUR_OF_DAY] = 0
        calendar[Calendar.MINUTE] = 0
        calendar[Calendar.SECOND] = 0
        calendar[Calendar.MILLISECOND] = 0
    }

    /**
     * yyyy-MM-dd 格式
     */
    fun formatDate(calendar: Calendar): String {
        val format = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
        return format.format(calendar.time)
    }

    /**
     * 发生错误时，默认返回当前时间
     *
     * @param dateStr yyyy-MM-dd 格式
     */
    fun parseDate(dateStr: String?): Calendar {
        return parseDate(dateStr, Calendar.getInstance())
    }

    /**
     * @param dateStr yyyy-MM-dd 格式
     * @param defDate 发生错误时，返回的时间
     */
    fun parseDate(dateStr: String?, defDate: Calendar): Calendar {
        if (TextUtils.isEmpty(dateStr)) {
            return defDate
        }
        try {
            val calendar = Calendar.getInstance()
            val format: DateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
            val date = format.parse(dateStr)
            if (null != date) {
                calendar.time = date
                return calendar
            }
        } catch (e: ParseException) {
            e.printStackTrace()
        }
        return defDate
    }

    /**
     * 格式化时间戳
     *
     * @param timestamp 时间戳，单位秒
     * @return yyyy-MM-dd格式
     */
    fun formatTimestamp(timestamp: String?): String? {
        if (null == timestamp) return null

        return try {
            val format: DateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
            val calendar = Calendar.getInstance()
            calendar.timeInMillis = timestamp.toLong() * 1000
            format.format(calendar.time)
        } catch (e: Exception) {
            e.printStackTrace()
            null
        }
    }

}