package com.gh.common.util;

import android.graphics.Color;
import android.widget.TextView;

import androidx.annotation.Nullable;

import com.gh.gamecenter.R;
import com.gh.gamecenter.entity.NewsEntity;
import com.gh.gamecenter.common.retrofit.Response;
import com.gh.gamecenter.retrofit.RetrofitManager;

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

import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;

public class NewsUtils {

    /**
     * 根据新闻类型获取标签背景资源
     */
    public static int getDrawableIdByType(String type) {
        switch (type) {
            case "活动":
            case "高阶":
                return R.drawable.textview_red_up;
            case "公告":
            case "中期":
                return R.drawable.textview_orange_up;
            case "新游":
                return R.drawable.textview_green_up;
            case "热门":
            case "置顶":
                return R.drawable.textview_all_red_up;
            default:
                return R.drawable.textview_blue_up;
        }
    }

    /**
     * 统计阅读量
     */
    public static void statNewsViews(String news_id) {
        RetrofitManager.getInstance().getApi().postArticleVisit(news_id)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Response<>());
    }

    /**
     * 去除与重复sourceList相同的数据
     */
    public static List<NewsEntity> removeDuplicateData(List<NewsEntity> sourceList, List<NewsEntity> rawList) {
        if (sourceList == null || sourceList.isEmpty()
                || rawList == null || rawList.isEmpty()) {
            return rawList;
        }
        String id;
        for (int i = 0; i < rawList.size(); i++) {
            id = rawList.get(i).getId();
            for (NewsEntity newsEntity : sourceList) {
                if (id.equals(newsEntity.getId())) {
                    rawList.remove(i);
                    i--;
                    break;
                }
            }
        }
        return rawList;
    }

    /**
     * 设置新闻类型
     */
    public static void setNewsType(TextView textView, @Nullable String type, int priority, int position) {
        if (priority != 0) {
            if (position == 0) {
                textView.setText(R.string.article_top);
            } else {
                textView.setText(R.string.article_hot);
            }
            textView.setBackgroundResource(R.drawable.textview_all_red_style);
            return;
        } else {
            textView.setText(type);
        }

        textView.setTextColor(Color.WHITE);
        switch (type != null ? type : "") {
            case "活动":
                textView.setBackgroundResource(R.drawable.textview_orange_style);
                break;
            case "公告":
                textView.setBackgroundResource(R.drawable.textview_red_style);
                break;
            case "评测":
                textView.setBackgroundResource(R.drawable.textview_red_style);
                break;
            case "杂谈":
                textView.setBackgroundResource(R.drawable.textview_orange_style);
                break;
            case "专题":
                textView.setBackgroundResource(R.drawable.textview_blue_style);
                break;
            default:
                textView.setBackgroundResource(R.drawable.textview_blue_style);
                break;
        }
    }

    /**
     * 设置新闻发布时间
     */
    public static void setNewsPublishOn(TextView textView, long time) {
        CommentUtils.setCommentTime(textView, time);
    }


    public static void setNewsDetailTime(TextView textView, long time) {
        CommentUtils.setCommentTime(textView, time);
    }

    public static String getFormattedTime(long time) {
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd", Locale.getDefault());
        try {
            long day = time * 1000;
            String year = String.valueOf(Calendar.getInstance().get(Calendar.YEAR));
            format.applyPattern("yyyy");
            String currentYear = format.format(day);
            format.applyPattern("yyyyMMdd");
            long today = format.parse(format.format(new Date())).getTime();
            if (day >= today && day < today + 86400 * 1000) {
                long min = new Date().getTime() / 1000 - day / 1000;
                int hour = (int) (min / (60 * 60));
                if (hour == 0) {
                    if (min < 60) {
                        return "刚刚";
                    } else {
                        return (String.format(Locale.getDefault(), "%d分钟前", (int) (min / 60)));
                    }
                } else {
                    return (String.format(Locale.getDefault(), "%d小时前", hour));
                }
            } else if (day >= today - 86400 * 1000 && day < today) {
                format.applyPattern("HH:mm");
                return ("昨天 ");
            } else if (day >= today - 86400 * 1000 * 7 && day < today - 86400 * 1000) {
                format.applyPattern("HH:mm");
                long days = (today - day) / 86400000 + 1;
                return String.format(Locale.getDefault(), "%d天前 ", days);
            } else if (day < today - 86400 * 1000 * 7 && year.equals(currentYear)) {
                format.applyPattern("MM-dd");
                return (format.format(day));
            } else {
                format.applyPattern("yyyy-MM-dd");
                return (format.format(day));
            }
        } catch (ParseException e) {
            e.printStackTrace();
            format.applyPattern("yyyy-MM-dd");
            return (format.format(time * 1000));
        }
    }

}
