package com.house.wallpapers.myitem;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions;
import com.house.wallpapers.R;
import com.house.wallpapers.App;
import com.house.wallpapers.databinding.ItemHomeBinding;
import com.house.wallpapers.adapter.OnItemclick;
import com.house.wallpapers.mybean.Data;
import com.house.wallpapers.mytool.Comutils;
import com.house.wallpapers.mytool.JsonData;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class ItemHome extends RecyclerView.Adapter<ItemHome.MainViewHolder> {
    private List<String> categoryNames = new ArrayList<>();
    private OnItemclick listener;
    // 缓存每个分类的第一条数据（避免重复解析JSON）
    private final List<Data> categoryFirstDataCache = new ArrayList<>();
    private RequestOptions imageOptions; // 延迟初始化（需Context）
    private void initImageOptions(Context context) {
        if (imageOptions == null) {
            int cornerDp = 12;
            // 动态将dp转为px，适配不同屏幕密度
            int cornerPx = (int) (cornerDp * context.getResources().getDisplayMetrics().density + 0.5f);
            imageOptions = new RequestOptions()
                    .transform(new CenterCrop(), new RoundedCorners(cornerPx)) // 用px值保证适配
                    .placeholder(R.mipmap.im_placeholder) // 加载中占位图
                    .error(R.mipmap.im_placeholder); // 加载失败占位图
        }
    }

    /**
     * 设置分类列表（仅英文名称）
     */
    public void setData(List<String> categoryNames) {
        if (categoryNames != null) {
            this.categoryNames.clear();
            this.categoryNames.addAll(categoryNames);
            // 初始化缓存（按分类顺序解析JSON）
            initCategoryFirstDataCache();
            notifyDataSetChanged();
        }
    }

    /**
     * 初始化缓存：解析每个分类的JSON，获取第一条数据
     * 逻辑与 MyApp 一致，避免依赖 ObectBox
     */
    private void initCategoryFirstDataCache() {
        categoryFirstDataCache.clear();
        Context context = App.mAppContext;
        if (context == null) return;

        // 初始化Glide图片配置（首次调用时初始化）
        initImageOptions(context);

        for (String categoryName : categoryNames) {
            Data firstData = null;
            try {
                // 拼接JSON文件名（与 MyApp 一致：分类名.json）
                String jsonFileName = categoryName + ".json";
                // 读取assets中的JSON文件
                InputStream open = context.getAssets().open(jsonFileName);
                String jsonStr = Comutils.getCovertStr(open);
                if (!jsonStr.isEmpty()) {
                    // 解析JSON获取数据（复用 JsonData 工具类）
                    List<Data> data = JsonData.INSTANCE.getData(jsonStr, categoryName);
                    if (!data.isEmpty()) {
                        Collections.shuffle(data); // 打乱顺序（与 MyApp 一致）
                        firstData = data.get(0); // 取第一条
                    }
                }
            } catch (IOException e) {
                // JSON文件不存在或读取失败时，用占位图
                firstData = null;
            }
            categoryFirstDataCache.add(firstData);
        }
    }

    public void setInfoWallpaperListener(OnItemclick listener) {
        this.listener = listener;
    }

    @NonNull
    @Override
    public MainViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        // ViewBinding 加载 Item 布局
        ItemHomeBinding binding = ItemHomeBinding.inflate(
                LayoutInflater.from(parent.getContext()),
                parent,
                false
        );
        // 初始化图片配置（防止App.mAppContext为空时未初始化）
        initImageOptions(parent.getContext());
        return new MainViewHolder(binding);
    }

    @Override
    public void onBindViewHolder(@NonNull MainViewHolder holder, int position) {
        if (position >= categoryNames.size() || position >= categoryFirstDataCache.size()) {
            return;
        }

        String categoryName = categoryNames.get(position);
        Data firstData = categoryFirstDataCache.get(position);
        Context context = holder.binding.getRoot().getContext();
        holder.binding.tvCategoryName.setText(categoryName);

        if (firstData != null) {
            String imageUrl = firstData.getPreviewUrl400();
            if (imageUrl != null && !imageUrl.isEmpty()) {
                Glide.with(context)
                        .load(imageUrl)
                        .apply(imageOptions)
                        .into(holder.binding.ivCategory);
            } else {
                holder.binding.ivCategory.setImageResource(R.mipmap.im_placeholder);
            }
        } else {
            holder.binding.ivCategory.setImageResource(R.mipmap.im_placeholder);
        }

        holder.binding.getRoot().setOnClickListener(v -> {
            if (listener != null) {
                Data myData = new Data();
                myData.setCategoryName(categoryName);
                myData.setImId(categoryName + "_" + position);
                if (firstData != null) {
                    myData.setPreviewUrl400(firstData.getPreviewUrl400());
                }
                listener.onItemClickAction(myData);
            }
        });
    }

    @Override
    public int getItemCount() {
        return categoryNames.size();
    }

    static class MainViewHolder extends RecyclerView.ViewHolder {
        ItemHomeBinding binding;

        public MainViewHolder(@NonNull ItemHomeBinding binding) {
            super(binding.getRoot());
            this.binding = binding;
        }
    }
}