package com.paint.sweet.drawing.sweetadapter;

import static android.content.ContentValues.TAG;

import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

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

import com.paint.sweet.drawing.PaintingApp;
import com.paint.sweet.drawing.R;
import com.paint.sweet.drawing.sweetactivity.PhotoSelectActivity;
import com.paint.sweet.drawing.sweetmanager.AppUtils;

import java.util.ArrayList;
import java.util.List;

public class ImagePreviewListAdapter extends RecyclerView.Adapter<ImagePreviewListAdapter.HomeVH> {

    private Context mCon;
    private List<String> data; // 实际的数据源
    private String categoryName; // 新增：分类名称（用于图片上的文字显示）
    private boolean isSearchPage = false; // 新增：标记是否为搜索页面（默认false）

    // 新增：搜索页面专用构造方法（无阴影）
    public ImagePreviewListAdapter(Context mCon, List<String> bitmapList, boolean isSearchPage) {
        this.mCon = mCon;
        this.data = bitmapList != null ? bitmapList : new ArrayList<>();
        this.categoryName = "";
        this.isSearchPage = isSearchPage; // 标记为搜索页面
    }

    // 保留：接收分类名称的构造方法（主页面用，带阴影）
    public ImagePreviewListAdapter(Context mCon, List<String> bitmapList, String categoryName) {
        this.mCon = mCon;
        this.data = bitmapList != null ? bitmapList : new ArrayList<>();
        this.categoryName = categoryName != null ? categoryName : "";
        this.isSearchPage = false; // 主页面默认带阴影
    }

    // 保留：原有构造方法，兼容旧调用
    public ImagePreviewListAdapter(Context mCon, List<String> bitmapList) {
        this(mCon, bitmapList, "");
    }

    @NonNull
    @Override
    public HomeVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_preview_image_list, parent, false);
        return new HomeVH(view);
    }

    @Override
    public void onBindViewHolder(@NonNull HomeVH holder, int position) {
        if (position < 0 || position >= data.size()) {
            Log.w(TAG, "无效的position：" + position);
            return;
        }

        String name = data.get(position);
        Log.d(TAG, "加载图片：" + name);

        // ========== 核心修改1：搜索页面移除所有阴影相关样式 ==========
        if (isSearchPage) {
            // 1. 隐藏阴影层
            holder.shadowLayout.setVisibility(View.GONE);
            // 2. 隐藏分类文字（搜索页面无需显示）
            holder.tvCategoryName.setVisibility(View.GONE);
            // 3. 移除CardView的阴影
            holder.cardView.setCardElevation(0);
            holder.cardView.setUseCompatPadding(false);
            holder.cardView.setPreventCornerOverlap(false);
        } else {
            // 主页面保留原有阴影逻辑
            // 显示分类名称（图片上的文字）
            if (!categoryName.isEmpty()) {
                holder.tvCategoryName.setText(categoryName);
                holder.tvCategoryName.setVisibility(View.VISIBLE);
            } else {
                holder.tvCategoryName.setVisibility(View.GONE);
            }
            // 恢复CardView阴影（确保主页面阴影正常）
            holder.cardView.setCardElevation(dp2px(4)); // 主页面默认阴影高度4dp
        }

        Bitmap bitmap = null;
        try {
            bitmap = AppUtils.loadImageFromAssets(mCon, name);
        } catch (Exception e) {
            Log.e(TAG, "加载图片失败：" + name, e);
        }

        if (bitmap != null) {
            holder.previewIm.setImageBitmap(bitmap);
            // 改为FIT_CENTER：完整显示图片，按比例适配控件（不裁剪、不拉伸）
            holder.previewIm.setScaleType(ImageView.ScaleType.FIT_CENTER);
            // 开启调整视图边界：让ImageView根据图片比例自动调整高度
            holder.previewIm.setAdjustViewBounds(true);
            // 移除固定背景色（可选，根据UI需求保留/删除）
            holder.previewIm.setBackgroundColor(mCon.getResources().getColor(R.color.white));

            // ========== 核心修改2：仅主页面执行阴影层布局逻辑 ==========
            if (!isSearchPage) {
                holder.previewIm.post(() -> {
                    int imageHeight = holder.previewIm.getHeight();
                    int shadowHeight = (int) (imageHeight * 0.3); // 阴影高度=图片30%

                    // 1. 设置阴影层高度
                    ViewGroup.LayoutParams params = holder.shadowLayout.getLayoutParams();
                    params.height = shadowHeight;
                    holder.shadowLayout.setLayoutParams(params);

                    // 2. 强制设置阴影层对齐图片底部（关键：实现下部分显示）
                    if (holder.shadowLayout.getLayoutParams() instanceof RelativeLayout.LayoutParams) {
                        RelativeLayout.LayoutParams shadowParams = (RelativeLayout.LayoutParams) holder.shadowLayout.getLayoutParams();
                        shadowParams.addRule(RelativeLayout.ALIGN_BOTTOM, R.id.imPreview); // 对齐图片底部
                        shadowParams.addRule(RelativeLayout.ALIGN_LEFT, R.id.imPreview);    // 对齐图片左侧
                        shadowParams.addRule(RelativeLayout.ALIGN_RIGHT, R.id.imPreview);   // 对齐图片右侧
                        holder.shadowLayout.setLayoutParams(shadowParams);
                    }

                    // 确保阴影层可见
                    holder.shadowLayout.setVisibility(View.VISIBLE);
                });
            }
        } else {
            holder.previewIm.setImageDrawable(null);
            holder.previewIm.setBackgroundColor(mCon.getResources().getColor(R.color.white));
            // 图片加载失败时隐藏阴影层
            holder.shadowLayout.setVisibility(View.GONE);
        }

        // 点击跳转逻辑（保留原有功能）
        holder.cardView.setOnClickListener(v -> {
            Intent intent = new Intent(mCon, PhotoSelectActivity.class);
            intent.putExtra(PaintingApp.Key_Camera, name);
            mCon.startActivity(intent);
        });
    }

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

    // 新增：dp转px工具方法
    private int dp2px(int dp) {
        return (int) (dp * mCon.getResources().getDisplayMetrics().density + 0.5f);
    }

    // ViewHolder包含阴影层和分类文字控件
    public static class HomeVH extends RecyclerView.ViewHolder {
        private ImageView previewIm;
        private CardView cardView;
        private TextView tvCategoryName; // 分类名称文字
        private LinearLayout shadowLayout; // 阴影层布局

        public HomeVH(@NonNull View itemView) {
            super(itemView);
            previewIm = itemView.findViewById(R.id.imPreview);
            cardView = itemView.findViewById(R.id.card_view);
            tvCategoryName = itemView.findViewById(R.id.tv_category_name); // 绑定文字控件
            shadowLayout = itemView.findViewById(R.id.shadow_layout); // 绑定阴影层布局
        }
    }

    // 修正updateData方法（操作正确的数据源data，且增加非空判断）
    public void updateData(List<String> newList) {
        // 防止传入null列表
        List<String> safeList = newList != null ? newList : new ArrayList<>();
        // 清空原有数据（操作正确的data变量）
        this.data.clear();
        // 添加新数据
        this.data.addAll(safeList);
        // 通知列表刷新
        notifyDataSetChanged();
    }
}