package com.paint.sweet.drawing.sweetfragment;

import android.graphics.Rect;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.paint.sweet.drawing.databinding.FragmentPreviewContentBinding;
import com.paint.sweet.drawing.sweetadapter.ImagePreviewListAdapter;
import com.paint.sweet.drawing.sweetmanager.AppUtils;

import java.util.List;

/**
 * 每个Tab对应的图片预览Fragment
 * 核心功能：2列网格展示图片、对称间距、搜索过滤、和顶部图标对齐
 */
public class DrawingImagePreviewFragment extends Fragment {
    // 参数Key：资产目录路径、分类名称
    private static final String ARG_DIR_PATH = "dir_path";
    private static final String ARG_CATEGORY_NAME = "category_name";

    // ViewBinding
    private FragmentPreviewContentBinding binding;
    // 数据相关
    private String dirPath;          // 资产目录路径
    private String categoryName;     // 分类名称（用于图片底部文字显示）
    private List<String> originalContentList;  // 原始图片列表
    private List<String> filteredContentList;  // 搜索过滤后的列表
    private ImagePreviewListAdapter adapter;        // 图片适配器

    // 静态创建方法（推荐：避免直接new，统一参数传递）
    public static DrawingImagePreviewFragment newInstance(String dirPath, String categoryName) {
        DrawingImagePreviewFragment fragment = new DrawingImagePreviewFragment();
        Bundle args = new Bundle();
        args.putString(ARG_DIR_PATH, dirPath);
        args.putString(ARG_CATEGORY_NAME, categoryName);
        fragment.setArguments(args);
        return fragment;
    }

    // 兼容旧调用：无分类名称时传空字符串
    public static DrawingImagePreviewFragment newInstance(String dirPath) {
        return newInstance(dirPath, "");
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 解析参数
        if (getArguments() != null) {
            dirPath = getArguments().getString(ARG_DIR_PATH);
            categoryName = getArguments().getString(ARG_CATEGORY_NAME);
        }
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        // 初始化ViewBinding
        binding = FragmentPreviewContentBinding.inflate(inflater, container, false);
        // 初始化RecyclerView（直接执行，无延迟）
        initRecyclerView();
        return binding.getRoot();
    }

    /**
     * 初始化RecyclerView：设置布局、适配器、间距
     */
    private void initRecyclerView() {
        // 空值校验：避免空指针
        if (dirPath == null || requireContext() == null) {
            return;
        }

        // 1. 加载资产目录下的图片列表
        List<String> contentList = AppUtils.fileExistsInAssets(requireContext(), dirPath);
        // 2. 初始化适配器（传递上下文、图片列表、分类名称）
        adapter = new ImagePreviewListAdapter(requireContext(), contentList, categoryName);

        // 3. 设置2列网格布局
        GridLayoutManager gridLayoutManager = new GridLayoutManager(requireContext(), 2);
        binding.preRecycler.setLayoutManager(gridLayoutManager);
        binding.preRecycler.setAdapter(adapter);

        // 4. 页面四周边距：15dp（和顶部伸缩图标左间距统一，保证对齐）
        int pagePadding = dp2px(15);
        binding.preRecycler.setPadding(pagePadding, pagePadding, pagePadding, pagePadding);
        binding.preRecycler.setClipToPadding(false); // 允许内容延伸到padding区域

        // 5. 计算图片Item宽度
        int screenWidth = requireContext().getResources().getDisplayMetrics().widthPixels;
        int usableWidth = screenWidth - pagePadding * 2; // 可用宽度=屏幕宽度-左右页边距
        int itemSpacing = dp2px(12);                     // 图片间统一间距：12dp
        int itemWidth = (usableWidth - itemSpacing) / 2; // 2列均分宽度（扣除间距）

        // 6. 设置Item间距（核心：对称分配，保证左右/上下间距一致）
        binding.preRecycler.addItemDecoration(new RecyclerView.ItemDecoration() {
            @Override
            public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
                // 设置Item宽度（固定宽度，保证两列一致）
                ViewGroup.LayoutParams params = view.getLayoutParams();
                params.width = itemWidth;
                params.height = ViewGroup.LayoutParams.WRAP_CONTENT; // 高度自适应图片
                view.setLayoutParams(params);

                // 获取Item位置：判断左/右列
                int position = parent.getChildAdapterPosition(view);
                int column = position % 2; // 0=左列，1=右列
                int halfSpacing = itemSpacing / 2; // 间距的一半

                // 水平间距：对称分配（左列右半距、右列左半距）
                if (column == 0) {
                    outRect.left = 0;
                    outRect.right = halfSpacing;
                } else {
                    outRect.left = halfSpacing;
                    outRect.right = 0;
                }

                // 垂直间距：上下各半距（和水平间距一致）
                outRect.top = halfSpacing;
                outRect.bottom = halfSpacing;
            }
        });

        // 7. 初始化搜索相关列表
        originalContentList = contentList;
        filteredContentList = new java.util.ArrayList<>(contentList);
    }

    /**
     * 检查是否有匹配搜索关键词的内容
     * @param keyword 搜索关键词
     * @return true=有匹配，false=无匹配
     */
    public boolean hasMatchContent(String keyword) {
        if (TextUtils.isEmpty(keyword) || originalContentList == null) {
            return originalContentList != null && !originalContentList.isEmpty();
        }
        // 忽略大小写匹配文件名
        String lowerKeyword = keyword.toLowerCase();
        for (String fileName : originalContentList) {
            String pureFileName = fileName.substring(fileName.lastIndexOf("/") + 1).toLowerCase();
            if (pureFileName.contains(lowerKeyword)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 更新搜索关键词，刷新列表
     * @param keyword 搜索关键词
     */
    public void updateSearchKeyword(String keyword) {
        if (originalContentList == null || filteredContentList == null || adapter == null) {
            return;
        }
        // 清空过滤列表
        filteredContentList.clear();
        if (TextUtils.isEmpty(keyword)) {
            // 无关键词：恢复原始列表
            filteredContentList.addAll(originalContentList);
        } else {
            // 有关键词：过滤匹配的图片
            String lowerKeyword = keyword.toLowerCase();
            for (String fileName : originalContentList) {
                String pureFileName = fileName.substring(fileName.lastIndexOf("/") + 1).toLowerCase();
                if (pureFileName.contains(lowerKeyword)) {
                    filteredContentList.add(fileName);
                }
            }
        }
        // 刷新适配器
        adapter.notifyDataSetChanged();
    }

    /**
     * dp转px工具方法
     * @param dp 待转换的dp值
     * @return 转换后的px值
     */
    private int dp2px(int dp) {
        return (int) (dp * requireContext().getResources().getDisplayMetrics().density + 0.5f);
    }

    /**
     * 销毁View时清空数据，避免内存泄漏
     */
    @Override
    public void onDestroyView() {
        super.onDestroyView();
        originalContentList = null;
        filteredContentList = null;
        adapter = null;
        binding = null; // 清空ViewBinding，释放资源
    }
}