package com.gh.common.databind;

import static com.gh.gamecenter.entity.SubjectEntity.SUBJECT_TAG_SELLING_POINT;
import static com.gh.gamecenter.entity.SubjectEntity.SUBJECT_TAG_TEST;
import static com.gh.gamecenter.entity.SubjectEntity.SUBJECT_TAG_TYPE;
import static com.gh.gamecenter.entity.SubjectEntity.SUBJECT_TAG_UPDATE;

import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextUtils;
import android.text.style.ForegroundColorSpan;
import android.view.View;
import android.view.ViewParent;
import android.widget.LinearLayout;
import android.widget.TextView;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.constraintlayout.widget.ConstraintSet;

import com.gh.common.chain.BrowserInstallHandler;
import com.gh.common.chain.CheckDownloadHandler;
import com.gh.common.chain.CheckStoragePermissionHandler;
import com.gh.common.chain.DownloadChainBuilder;
import com.gh.common.chain.DownloadChainHandler;
import com.gh.common.chain.DownloadDialogHelperHandler;
import com.gh.common.chain.GamePermissionHandler;
import com.gh.common.chain.LandPageAddressHandler;
import com.gh.common.chain.OverseaDownloadHandler;
import com.gh.common.chain.PackageCheckHandler;
import com.gh.common.chain.UnsupportedFeatureHandler;
import com.gh.common.chain.ValidateVSpaceHandler;
import com.gh.common.chain.VersionNumberHandler;
import com.gh.common.filter.RegionSetting;
import com.gh.common.filter.RegionSettingHelper;
import com.gh.common.history.HistoryHelper;
import com.gh.common.repository.ReservationRepository;
import com.gh.common.simulator.SimulatorDownloadManager;
import com.gh.common.simulator.SimulatorGameManager;
import com.gh.common.util.CheckLoginUtils;
import com.gh.common.util.DialogUtils;
import com.gh.common.util.GameUtils;
import com.gh.common.util.GameViewUtils;
import com.gh.common.util.LogUtils;
import com.gh.common.util.PackageInstaller;
import com.gh.common.util.PackageLauncher;
import com.gh.common.util.PackageUtils;
import com.gh.common.util.ReservationHelper;
import com.gh.download.DownloadManager;
import com.gh.download.dialog.DownloadDialog;
import com.gh.download.server.BrowserInstallHelper;
import com.gh.gamecenter.DownloadManagerActivity;
import com.gh.gamecenter.R;
import com.gh.gamecenter.WebActivity;
import com.gh.gamecenter.common.databinding.LayoutGameItemSellingPointBinding;
import com.gh.gamecenter.common.entity.LinkEntity;
import com.gh.gamecenter.common.utils.DarkModeUtils;
import com.gh.gamecenter.common.utils.ExtensionsKt;
import com.gh.gamecenter.common.utils.FileUtils;
import com.gh.gamecenter.common.utils.NewFlatLogUtils;
import com.gh.gamecenter.common.utils.SensorsBridge;
import com.gh.gamecenter.core.utils.MtaHelper;
import com.gh.gamecenter.core.utils.TimeUtils;
import com.gh.gamecenter.core.utils.ToastUtils;
import com.gh.gamecenter.feature.entity.ApkEntity;
import com.gh.gamecenter.feature.entity.GameEntity;
import com.gh.gamecenter.feature.entity.PluginLocation;
import com.gh.gamecenter.feature.entity.TagStyleEntity;
import com.gh.gamecenter.feature.entity.TestEntity;
import com.gh.gamecenter.feature.exposure.ExposureEvent;
import com.gh.gamecenter.feature.utils.PlatformUtils;
import com.gh.gamecenter.feature.view.DownloadButton;
import com.gh.gamecenter.feature.view.GameIconView;
import com.gh.gamecenter.gamedetail.dialog.GamePermissionDialogFragment;
import com.gh.gamecenter.manager.PackagesManager;
import com.gh.vspace.VHelper;
import com.lightgame.download.DownloadEntity;
import com.lightgame.utils.Utils;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import kotlin.collections.CollectionsKt;

/**
 * Created by khy on 12/02/18.
 */
public class BindingAdapters {

    public static void setMessageUnread(TextView view, int unreadCount) {
        if (unreadCount < 100) {
            view.setText(String.valueOf(unreadCount));
        } else {
            view.setText("99+");
        }
    }

    public static void setGame(View view, GameEntity gameEntity) {
        if (gameEntity != null && view instanceof GameIconView) {
            ((GameIconView) view).displayGameIcon(gameEntity);
        }
    }

    public static void setDownloadButton(DownloadButton progressBar,
                                         GameEntity gameEntity,
                                         ExposureEvent traceEvent,
                                         @Nullable View.OnClickListener clickCallBack,
                                         @Nullable String entrance,
                                         @Nullable String location) {
        setDownloadButton(progressBar, gameEntity, traceEvent, clickCallBack, entrance, location, "其他");
    }

    // 大图下的进度条
    public static void setDownloadButton(DownloadButton progressBar,
                                         GameEntity gameEntity,
                                         ExposureEvent traceEvent,
                                         @Nullable View.OnClickListener clickCallBack,
                                         @Nullable String entrance,
                                         @Nullable String location,
                                         String sourceEntrance) {

        // 恢复DialogFragment
        restoreDialogFragment(progressBar);

        // 判断是否显示按钮
        if (gameEntity != null
                && !"光环助手".equals(gameEntity.getName())) {
            progressBar.setVisibility(View.VISIBLE);
        } else {
            progressBar.setVisibility(View.GONE);
            return;
        }

        // 点击事件
        progressBar.setOnClickListener(v -> {
            if (clickCallBack != null) clickCallBack.onClick(v);
            switch (progressBar.getButtonStyle()) {
                case DOWNLOADING_PLUGIN:
                case DOWNLOADING_NORMAL:
                    Intent intent = DownloadManagerActivity.getDownloadMangerIntent(v.getContext(),
                            gameEntity.getApk().isEmpty() ? "" : gameEntity.getApk().get(0).getUrl(), entrance);
                    v.getContext().startActivity(intent);
                    break;
                case NONE:
                    Utils.toast(v.getContext(), "该游戏已关闭下载");
                    break;
                case NORMAL:
                case PLUGIN:
                    final RegionSetting.GameH5Download gameH5Download = RegionSettingHelper.getGameH5DownloadByGameId(gameEntity.getId());
                    if (gameH5Download != null) {
                        DialogUtils.showGameH5DownloadDialog(v.getContext(), gameEntity, gameH5Download);
                    } else {
                        if (gameEntity.getApk().size() == 1) {
                            ApkEntity apk = gameEntity.getApk().get(0);
                            DownloadEntity downloadEntity = SimulatorGameManager.findDownloadEntityByUrl(apk.getUrl());
                            if (gameEntity.getSimulator() != null) {
                                boolean isInstalled = PackageUtils.isInstalledFromAllPackage(v.getContext(), gameEntity.getSimulator().getApk().getPackageName());
                                if (downloadEntity != null && SimulatorGameManager.isSimulatorGame(gameEntity) && !isInstalled) {
                                    SimulatorDownloadManager.getInstance().showDownloadDialog(v.getContext(), gameEntity.getSimulator(),
                                            SimulatorDownloadManager.SimulatorLocation.LAUNCH, gameEntity.getId(), gameEntity.getName(), gameEntity.getCategoryChinese(), null);
                                    return;
                                }
                            }

                            DownloadChainBuilder builder = new DownloadChainBuilder();
                            builder.addHandler(new UnsupportedFeatureHandler());
                            builder.addHandler(new GamePermissionHandler());
                            builder.addHandler(new CheckStoragePermissionHandler());
                            builder.addHandler(new ValidateVSpaceHandler());
                            builder.addHandler(new BrowserInstallHandler());
                            builder.addHandler(new PackageCheckHandler());
                            builder.addHandler(new DownloadDialogHelperHandler());
                            builder.addHandler(new VersionNumberHandler());
                            builder.addHandler(new LandPageAddressHandler());
                            builder.addHandler(new OverseaDownloadHandler());
                            builder.addHandler(new CheckDownloadHandler());

                            builder.setProcessEndCallback(gameEntity.getId(), (asVGame, isSubscribe) -> {
                                download(v.getContext(),
                                        progressBar,
                                        gameEntity,
                                        traceEvent,
                                        asVGame,
                                        (boolean) isSubscribe,
                                        entrance,
                                        location);
                                return null;
                            });
                            final DownloadChainHandler chainHandler = builder.buildHandlerChain();
                            if (chainHandler != null) {
                                chainHandler.handleRequest(
                                        v.getContext(),
                                        gameEntity,
                                        GameUtils.shouldPerformAsVGame(gameEntity)
                                );
                            }
                        } else {
                            DownloadChainBuilder builder = new DownloadChainBuilder();
                            builder.addHandler(new UnsupportedFeatureHandler());
                            builder.addHandler(new GamePermissionHandler());
                            builder.addHandler(new VersionNumberHandler());

                            builder.setProcessEndCallback(gameEntity.getId(), (asVGame, isSubscribe) -> {
                                DownloadDialog.showDownloadDialog(
                                        v.getContext(),
                                        gameEntity,
                                        traceEvent,
                                        entrance,
                                        location + ":" + gameEntity.getName(),
                                        null);
                                return null;
                            });
                            final DownloadChainHandler chainHandler = builder.buildHandlerChain();
                            if (chainHandler != null) {
                                chainHandler.handleRequest(
                                        v.getContext(),
                                        gameEntity,
                                        GameUtils.shouldPerformAsVGame(gameEntity)
                                );
                            }
                        }
                    }
                    break;
                case LAUNCH_OR_OPEN:
                    if (gameEntity.getApk().size() == 1) {
                        //启动模拟器游戏
                        if (SimulatorGameManager.isSimulatorGame(gameEntity)) {
                            DownloadEntity downloadEntity = SimulatorGameManager.findDownloadEntityByUrl(gameEntity.getApk().isEmpty() ? "" : gameEntity.getApk().get(0).getUrl());
                            if (downloadEntity != null) {
                                File file = new File(downloadEntity.getPath());
                                if (!file.exists()) {
                                    download(v.getContext(),
                                            progressBar,
                                            gameEntity,
                                            traceEvent,
                                            false,
                                            false,
                                            entrance,
                                            location);
                                    return;
                                }

                                SimulatorGameManager.launchSimulatorGame(downloadEntity, gameEntity);
                            }
                            return;
                        }

                        PackageLauncher.launch(v.getContext(), gameEntity, null);
                    } else {
                        DownloadDialog.showDownloadDialog(
                                v.getContext(),
                                gameEntity,
                                traceEvent,
                                entrance,
                                location + ":" + gameEntity.getName(),
                                null);
                    }
                    break;
                case INSTALL_PLUGIN:
                case INSTALL_NORMAL:
                    if (gameEntity.getApk().size() == 1) {

                        NewFlatLogUtils.INSTANCE.logGameInstall(
                                gameEntity.getId(),
                                gameEntity.getName() != null ? gameEntity.getName() : "",
                                "主动安装"
                        );

                        SensorsBridge.trackInstallGameClick(
                                gameEntity.getId(),
                                gameEntity.getName() != null ? gameEntity.getName() : "",
                                "主动安装",
                                gameEntity.isDspGame(),
                                gameEntity.getDspAdId()
                        );

                        DownloadEntity downloadEntity = DownloadManager.getInstance().getDownloadEntitySnapshot(gameEntity);

                        if (downloadEntity != null) {
                            if (ExtensionsKt.isLocalDownloadInDualDownloadMode(downloadEntity)) {
                                PackageInstaller.install(v.getContext(), downloadEntity);
                            } else {
                                VHelper.installOrLaunch(v.getContext(), gameEntity, null);
                            }
                        }
                    }
                    break;
                case RESERVABLE:
                    GamePermissionDialogFragment.show((AppCompatActivity) v.getContext(), gameEntity, gameEntity.getInfo(), () -> {
                        CheckLoginUtils.checkLogin(progressBar.getContext(), "", () -> {
                            ReservationHelper.reserve(v.getContext(), gameEntity, sourceEntrance, () -> {
                                LogUtils.logReservation(gameEntity, traceEvent);
                                updateReservation(progressBar, gameEntity);
                            });
                        });
                    });
                    break;
                case RESERVED:
                    ReservationHelper.showCancelReservationDialog(progressBar.getContext(), gameEntity, () -> {
                        ReservationHelper.cancelReservation(gameEntity, () -> {
                            updateReservation(progressBar, gameEntity);
                        });
                    });
                    break;
                case H5_GAME:
                    LinkEntity linkEntity = gameEntity.getH5Link();
                    boolean isPlay = "play".equals(linkEntity.getType()); // 是否为开始玩
                    MtaHelper.onEvent("H5页面", "入口", "列表页_" + gameEntity.getName());

                    if (isPlay) {
                        HistoryHelper.insertGameEntity(gameEntity);
                    }

                    GamePermissionDialogFragment.show((AppCompatActivity) v.getContext(), gameEntity, gameEntity.getInfo(), () -> {
                        Intent i = new Intent(WebActivity.getIntentForWebGame(progressBar.getContext(), linkEntity.getLink(), gameEntity.getName(), isPlay, linkEntity.getCloseButton()));
                        progressBar.getContext().startActivity(i);
                    });
                    break;
                case UPDATING:
                    Utils.toast(progressBar.getContext(), "正在加急更新版本，敬请后续留意");
                    break;
            }
        });

        // 显示预约
        if (gameEntity.isReservable()) {
            if (!ReservationRepository.thisGameHasBeenReserved(gameEntity.getId())) {
                progressBar.setText("预约");
                progressBar.setButtonStyle(DownloadButton.ButtonStyle.RESERVABLE);
            } else {
                progressBar.setText("已预约");
                progressBar.setButtonStyle(DownloadButton.ButtonStyle.RESERVED);
            }
            return;
        }

        // 显示下载按钮状态
        if (gameEntity.getApk().isEmpty() || gameEntity.getDownloadOffStatus() != null) {
            LinkEntity h5LinkEntity = gameEntity.getH5Link();
            String offStatus = gameEntity.getDownloadOffStatus();
            if (h5LinkEntity != null) {
                if ("play".equals(h5LinkEntity.getType())) {
                    progressBar.setText("开始玩");
                } else {
                    progressBar.setText("查看");
                }
                progressBar.setButtonStyle(DownloadButton.ButtonStyle.H5_GAME);
            } else {
                if (("dialog".equals(offStatus) || "third_party".equals(offStatus))) {
                    progressBar.setText("查看");
                    progressBar.setButtonStyle(DownloadButton.ButtonStyle.NONE_WITH_HINT);
                } else if ("updating".equals(offStatus)) {
                    progressBar.setText("更新中");
                    progressBar.setButtonStyle(DownloadButton.ButtonStyle.UPDATING);
                } else {
                    progressBar.setText("暂无");
                    progressBar.setButtonStyle(DownloadButton.ButtonStyle.NONE);
                }
            }

        } else {
            String status = GameUtils.getDownloadBtnText(progressBar.getContext(), gameEntity, true, false, PluginLocation.only_game);
            switch (status) {
                case "插件化":
                    progressBar.setButtonStyle(DownloadButton.ButtonStyle.PLUGIN);
                    break;
                case "打开":
                case "启动":
                    progressBar.setButtonStyle(DownloadButton.ButtonStyle.LAUNCH_OR_OPEN);
                    break;
                default:
                    progressBar.setButtonStyle(DownloadButton.ButtonStyle.NORMAL);
                    break;
            }
            progressBar.setText(status);
        }

        // 显示下载过程状态
        if (gameEntity.getApk().size() == 1) {
            DownloadEntity downloadEntity = DownloadManager.getInstance().getDownloadEntitySnapshot(gameEntity);
            if (downloadEntity != null) {
                progressBar.setProgress((int) (downloadEntity.getPercent() * 10));
                switch (downloadEntity.getStatus()) {
                    case downloading:
                    case pause:
                    case timeout:
                    case neterror:
                    case diskisfull:
                    case diskioerror:
                    case waiting:
                        progressBar.setText(com.gh.gamecenter.feature.R.string.downloading);
                        if (downloadEntity.isPluggable() && PackagesManager.isInstalled(downloadEntity.getPackageName())) {
                            progressBar.setButtonStyle(DownloadButton.ButtonStyle.DOWNLOADING_PLUGIN);
                        } else {
                            progressBar.setButtonStyle(DownloadButton.ButtonStyle.DOWNLOADING_NORMAL);
                        }
                        break;
                    case done:
                        progressBar.setText(com.gh.gamecenter.feature.R.string.install);
                        if (downloadEntity.isPluggable()
                                && PackagesManager.isInstalled(downloadEntity.getPackageName())) {
                            progressBar.setButtonStyle(DownloadButton.ButtonStyle.INSTALL_PLUGIN);
                        } else {
                            progressBar.setButtonStyle(DownloadButton.ButtonStyle.INSTALL_NORMAL);
                        }
                        break;
                    case cancel:
                    case hijack:
                    case notfound:
                    case uncertificated:
                    case unqualified:
                    case unavailable:
                    case banned:
                        break;
                    default:
                        break;
                }
            }
        }
    }

    /**
     * 当页面完全重建时，若存在重建的DialogFragment，则需要手动恢复该DialogFragment之前配置的回调(因为DialogFragment重建时只会从arguments中获取之前的配置内容，
     * 而arguments无法传递回调)，或者dismiss该DialogFragment
     */
    private static void restoreDialogFragment(DownloadButton progressBar) {
        GamePermissionDialogFragment gamePermissionDialogFragment =
                ((GamePermissionDialogFragment) ((AppCompatActivity) progressBar.getContext()).getSupportFragmentManager().findFragmentByTag(GamePermissionDialogFragment.class.getName()));
        if (gamePermissionDialogFragment != null) {
            gamePermissionDialogFragment.dismissAllowingStateLoss();
        }
    }

    private static void updateReservation(DownloadButton progressBar, GameEntity gameEntity) {
        // 显示预约
        if (gameEntity.isReservable()) {
            if (!ReservationRepository.thisGameHasBeenReserved(gameEntity.getId())) {
                progressBar.setText("预约");
                progressBar.setButtonStyle(DownloadButton.ButtonStyle.RESERVABLE);
            } else {
                progressBar.setText("已预约");
                progressBar.setButtonStyle(DownloadButton.ButtonStyle.RESERVED);
            }
        }
    }


    // 开始下载
    private static void download(Context context,
                                 DownloadButton progressBar,
                                 GameEntity gameEntity,
                                 ExposureEvent traceEvent,
                                 boolean asVGame,
                                 boolean isSubscribe,
                                 String entrance,
                                 String location) {
        if (BrowserInstallHelper.shouldAutoSwitchAssistantInstall(gameEntity)) {
            ToastUtils.toast(context.getString(R.string.unsupported_browser_install_hint));
        }
        String buttonText = progressBar.getText();
        ApkEntity apkEntity = CollectionsKt.firstOrNull(gameEntity.getApk());
        String msg = FileUtils.isCanDownload(progressBar.getContext(), apkEntity == null ? "" : apkEntity.getSize());
        if (apkEntity != null && TextUtils.isEmpty(msg)) {
            DownloadManager.createDownload(progressBar.getContext(),
                    apkEntity,
                    gameEntity,
                    asVGame,
                    gameEntity.isDualBtnModeEnabled(),
                    entrance,
                    location + gameEntity.getName(),
                    isSubscribe,
                    traceEvent);

            progressBar.setProgress(0);
            progressBar.setButtonStyle(buttonText.contains("插件化") ?
                    DownloadButton.ButtonStyle.DOWNLOADING_PLUGIN : DownloadButton.ButtonStyle.DOWNLOADING_NORMAL);
        } else {
            Utils.toast(progressBar.getContext(), msg);
        }
    }

    /**
     * 包含测试开服标签
     *
     * @param layout
     * @param gameEntity
     * @param subjectTag 默认为 “”，只有游戏专题可以配置subjectTag
     */
    public static void setGameTags(LinearLayout layout, GameEntity gameEntity, String subjectTag) {
        try {
            if (layout.getVisibility() == View.GONE) return;
            ArrayList<TagStyleEntity> tagStyle = new ArrayList<>();
            TestEntity test = gameEntity.getTest();
            if (test != null && subjectTag.equals(SUBJECT_TAG_TEST)) {
                // 显示开测表标签
                TagStyleEntity typeTag = new TagStyleEntity();
                boolean isDarkModeOn = DarkModeUtils.INSTANCE.isDarkModeOn(layout.getContext());
                typeTag.setName(test.getType() != null ? test.getType() : "");
                typeTag.setBackground("1AFFA142");
                typeTag.setColor(isDarkModeOn ? "EB9238" : "FFA142");
                tagStyle.add(typeTag);

                TagStyleEntity timeTag = new TagStyleEntity();
                if (test.getStartPending()) {
                    timeTag.setName(test.getStartText());
                } else {
                    timeTag.setName(GameViewUtils.getGameTestDate(test.getStart()));
                }
                timeTag.setBackground("1A06CEA8");
                timeTag.setColor(isDarkModeOn ? "07A385" : "06CEA8");
                tagStyle.add(timeTag);

            } else {
                tagStyle = gameEntity.getTagStyle();
            }
            GameViewUtils.setLabelList(layout.getContext(), layout, tagStyle);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void setGameTagsWithSellingPoint(LinearLayout layout, LayoutGameItemSellingPointBinding binding, GameEntity gameEntity, String subjectTag) {
        if (subjectTag.equals(SUBJECT_TAG_SELLING_POINT)) {
            layout.setVisibility(View.GONE);
            binding.getRoot().setVisibility(View.VISIBLE);
            GameEntity.SellingPoints sellingPoints = gameEntity.getSellingPoints();
            if (sellingPoints != null) {
                binding.tvSellingPoints.setVisibility(View.VISIBLE);
                binding.tvSellingPoints.setText(sellingPoints.getText());
            } else {
                binding.tvSellingPoints.setVisibility(View.GONE);
            }

            ArrayList<TagStyleEntity> tagStyle = gameEntity.getTagStyle();
            StringBuilder tagText = new StringBuilder();
            for (int i = 0; i < tagStyle.size(); i++) {
                if (i < 3) {
                    tagText.append(i == 0 ? "" : "·").append(tagStyle.get(i).getName());
                }
            }
            binding.gtcvTags.setText(tagText);
        } else {
            layout.setVisibility(View.VISIBLE);
            binding.getRoot().setVisibility(View.GONE);
            switch (subjectTag) {
                case SUBJECT_TAG_UPDATE:
                    List<TagStyleEntity> updateTags = new ArrayList<>();
                    TagStyleEntity updateTag = new TagStyleEntity(
                            "local_generated",
                            TimeUtils.getFormatTime(gameEntity.getUpdateTime(), "MM-dd") + " 更新",
                            "",
                            "1383EB",
                            "E8F3FF",
                            "1383EB",
                            false
                    );
                    updateTags.add(updateTag);
                    GameViewUtils.setLabelList(layout.getContext(), layout, updateTags);
                    break;
                case SUBJECT_TAG_TYPE:
                    GameViewUtils.setLabelList(layout.getContext(), layout, gameEntity.getTagStyle());
                    break;
                default:
                    setGameTags(layout, gameEntity, subjectTag);
                    break;
            }
        }

        ViewParent parent = binding.getRoot().getParent();
        if (parent instanceof ConstraintLayout) {
            ConstraintLayout constraintLayout = (ConstraintLayout) parent;
            ConstraintSet constraintSet = new ConstraintSet();
            constraintSet.clone(constraintLayout);
            constraintSet.clear(R.id.gameDesSpace, ConstraintSet.BOTTOM);
            if (subjectTag.equals(SUBJECT_TAG_SELLING_POINT)) {
                constraintSet.connect(R.id.gameDesSpace, ConstraintSet.BOTTOM, R.id.layout_selling_points, ConstraintSet.TOP);
            } else {
                constraintSet.connect(R.id.gameDesSpace, ConstraintSet.BOTTOM, R.id.label_list, ConstraintSet.TOP);
            }
            constraintSet.applyTo(constraintLayout);
        }
    }

    public static void setVideoDetailGameTags(LinearLayout layout, GameEntity gameEntity) {
        try {
            ArrayList<TagStyleEntity> tagStyle = new ArrayList<>();
            TestEntity test = gameEntity.getTest();
            if (test != null
                    // 这个判断用于开测表列表
                    && !"type_tag".equals(test.getGameTag())) {
                TagStyleEntity typeTag = new TagStyleEntity();
                typeTag.setName(test.getType() != null ? test.getType() : "");
                typeTag.setBackground("FFF3E0");
                typeTag.setColor("FA8500");
                tagStyle.add(typeTag);

                TagStyleEntity timeTag = new TagStyleEntity();
                timeTag.setName(GameViewUtils.getGameTestDate(test.getStart()));
                timeTag.setBackground("E0FFF9");
                timeTag.setColor("00A887");
                tagStyle.add(timeTag);
            } else {
                tagStyle = gameEntity.getTagStyle();
            }
            GameViewUtils.setLabelList(layout.getContext(), layout, tagStyle, 4);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void setGameName(TextView view, GameEntity game, boolean isShowPlatform) {
        String gameName;
        if (isShowPlatform && game.getApk().size() > 0) {
            gameName = String.format("%s - %s", game.getName(),
                    PlatformUtils.getInstance(view.getContext()).getPlatformName(
                            game.getApk().get(0).getPlatform()));
            if (!gameName.equals((String) view.getTag(com.gh.gamecenter.common.R.string.tag_game_name_id))) {
                view.setText(gameName);
                view.setTag(com.gh.gamecenter.common.R.string.tag_game_name_id, gameName);
            }
        } else {
            gameName = game.getName();
            if (gameName != null && !gameName.equals((String) view.getTag(com.gh.gamecenter.common.R.string.tag_game_name_id))) {
                view.setText(gameName);
                view.setTag(com.gh.gamecenter.common.R.string.tag_game_name_id, gameName);
            }
        }

    }

    public static void setGameTags(TextView view, List<TagStyleEntity> tags, int maxTags) {
        if (tags == null) {
            view.setText("");
            return;
        }

        int showCount = tags.size() > maxTags ? maxTags : tags.size(); // 最多显示3个

        StringBuilder content = new StringBuilder();
        for (int i = 0; i < showCount; i++) {
            TagStyleEntity tag = tags.get(i);
            content.append(tag.getName());
            if (i != showCount - 1) content.append("/");
        }

        Spannable span = new SpannableString(content);
        int index = 0;
        for (int i = 0; i < showCount; i++) {
            TagStyleEntity tag = tags.get(i);
            int start = index;
            int end = start + tag.getName().length() + ((i != showCount - 1) ? 1 : 0);
            index = end;
            span.setSpan(new ForegroundColorSpan(ExtensionsKt.hexStringToIntColor("#" + tag.getColor(), Color.WHITE)),
                    start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
        view.setText(span);
    }
}
