package kz.arta.synergy.workflow.mobile.android.common.utils;

import android.content.Context;

import java.text.DateFormat;
import java.text.DateFormatSymbols;
import java.text.SimpleDateFormat;
import java.util.Date;

import kz.arta.synergy.workflow.mobile.android.R;

/**
 * Created by neox on 18.09.14.
 * Утилиты для работы с датой
 */
public class DateUtils {

    /**
     * Год
     */
    public final static String YEAR = "year";

    /**
     * Месяц
     */
    public final static String MONTH = "month";

    /**
     * День
     */
    public final static String DAY = "day";

    /**
     * Час
     */
    public final static String HOUR = "hour";

    /**
     * Минуты
     */
    public final static String MINUTES = "minutes";

    /**
     * Формат даты, который будет отображен в компоненте
     */
    public final static String DEFAULT_EDIT_TEXT_DATE = "dd / MM / yyyy";

    /**
     * Формат времени, который будет отображен в компоненте
     */
    public final static String DEFAULT_EDIT_TEXT_TIME = "HH:mm";

    /**
     * Дефолтная дата в том виде, что приходит с сервера
     */
    public final static String DEFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm";

    /**
     * Формат даты, которая отображается на плашке резолюции
     */
    public final static String DEFAULT_DATE_RESOLUTION_ITEM = "d MMMM yyyy HH:mm";

    /**
     * Формат даты, которая отображается на плашке документа (планшет)
     */
    public final static String DEFAULT_DATE_DOCUMENT_ITEM_FULL = "dd.MM.yy HH:mm";

    /**
     * Формат даты, которая отображается на плашке документа
     */
    public final static String DEFAULT_DATE_DOCUMENT_ITEM = "dd.MM.yy";

    /**
     * Формат даты, которая отображается в информации о работе/документе
     */
    public final static String DEFAULT_DATE_WORK_INFO = "d MMMM yyyy";

    /**
     * Формат даты для сортировки файлов в хранилище
     */
    public final static String DEFAULT_DATE_STORAGE_SORT = "yyyy-MM-dd";

    /**
     * Формат даты для журнала синхронизации
     */
    public final static String DEFAULT_DATE_JOURNAL_SYNC = "yyyy-MM-dd HH:mm";

    /**
     * Метка файла/папки для уже имеющегося в папке
     */
    public final static String DATE_NEW_FILE = "yyyy-MM-dd HH_mm";

    /**
     * Формат даты для лейбла с синхронизацией
     */
    public final static String SYNC_LABEL_FORMAT = "d MMMM HH:mm";

    /**
     * Формат новых файлов
     */
    public final static String DEFAULT_NEW_FILE_FORMAT = "dd MM yyyy HH mm ss";

    public static String parseDateWorkInfo(String dat, Context context) {
        String[] russian = context.getResources().getStringArray(R.array.months);
        try {
            Date date = new SimpleDateFormat(DEFAULT_DATE_FORMAT).parse(dat);
            DateFormatSymbols russSymbol = new DateFormatSymbols();
            russSymbol.setMonths(russian);
            return new SimpleDateFormat(DEFAULT_DATE_WORK_INFO, russSymbol).format(date);
        } catch (Exception e) {
            return "";
        }
    }

    public static String parseDateOfflineComment(long milliseconds, Context context) {
        String[] russian = context.getResources().getStringArray(R.array.months);
        try {
            Date date = new Date(milliseconds);
            DateFormatSymbols russSymbol = new DateFormatSymbols();
            russSymbol.setMonths(russian);
            return new SimpleDateFormat(DEFAULT_DATE_RESOLUTION_ITEM, russSymbol).format(date);
        } catch (Exception e) {
            return "";
        }
    }

    public static String changePickerDialog(int number) {
        if (number < 10) {
            return '0' + String.valueOf(number);
        } else {
            return String.valueOf(number);
        }
    }

    public static String parseData(String string, String finalFormat, String example) {
        try {
            Date date = new SimpleDateFormat(example).parse(string);
            return new SimpleDateFormat(finalFormat).format(date);
        } catch (Exception e) {
            return "";
        }
    }

    public static String getDateFromMilliseconds(String milliseconds) {
        try {
            DateFormat dateFormat = new SimpleDateFormat(DEFAULT_DATE_FORMAT);
            Date date = new Date(Long.parseLong(milliseconds));
            return dateFormat.format(date);
        } catch (Exception exc) {
            return "";
        }
    }

    public static String getNewFileFormat(long milliseconds) {
        try {
            DateFormat dateFormat = new SimpleDateFormat(DEFAULT_NEW_FILE_FORMAT);
            Date date = new Date(milliseconds);
            return dateFormat.format(date);
        } catch (Exception exc) {
            return "";
        }
    }

    public static String getMillisecondsFromDate(String str) {
        try {
            Date date = new SimpleDateFormat(DEFAULT_DATE_FORMAT).parse(str);
            return String.valueOf(date.getTime());
        } catch (Exception exc) {
            return "";
        }
    }

    public static String getResolutionDate(String milliseconds, Context context) {
        String[] russian = context.getResources().getStringArray(R.array.months);
        try {
            DateFormatSymbols russSymbol = new DateFormatSymbols();
            russSymbol.setMonths(russian);
            DateFormat dateFormat = new SimpleDateFormat(DEFAULT_DATE_RESOLUTION_ITEM, russSymbol);
            Date date = new Date(Long.parseLong(milliseconds));
            return dateFormat.format(date);
        } catch (Exception exc) {
            return "";
        }
    }

    public static String getMillisecondsFromDateResolution(String str) {
        try {
            Date date = new SimpleDateFormat(DateUtils.DEFAULT_EDIT_TEXT_DATE + " " + DateUtils.DEFAULT_EDIT_TEXT_TIME).parse(str);
            return String.valueOf(date.getTime());
        } catch (Exception exc) {
            return "";
        }
    }

    public static String getFullDateDocumentItem(String dte) {
        try {
            Date date = new SimpleDateFormat(DEFAULT_DATE_FORMAT).parse(dte);
            return new SimpleDateFormat(DEFAULT_DATE_DOCUMENT_ITEM_FULL).format(date);
        } catch (Exception exc) {
            return "";
        }
    }

    public static String getDateDocumentItem(String dte) {
        try {
            Date date = new SimpleDateFormat(DEFAULT_DATE_FORMAT).parse(dte);
            return new SimpleDateFormat(DEFAULT_DATE_DOCUMENT_ITEM).format(date);
        } catch (Exception exc) {
            return "";
        }
    }

    public static String getDateNewFile(String milliseconds) {
        try {
            DateFormat dateFormat = new SimpleDateFormat(DATE_NEW_FILE);
            Date date = new Date(Long.parseLong(milliseconds));
            return dateFormat.format(date);
        } catch (Exception exc) {
            return "";
        }
    }

    public static String getDateLabelSync(Context context) {
        String[] russian = context.getResources().getStringArray(R.array.months);
        try {
            Date date = new Date(System.currentTimeMillis());
            DateFormatSymbols russSymbol = new DateFormatSymbols();
            russSymbol.setMonths(russian);
            return new SimpleDateFormat(SYNC_LABEL_FORMAT, russSymbol).format(date);
        } catch (Exception e) {
            return "";
        }
    }
}
