package com.key.vibekeyboard.Dialog;

import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;

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.key.vibekeyboard.Activity.DownloadActivity;
import com.key.vibekeyboard.R;
import com.key.vibekeyboard.Room.WallpaperInfo;
import com.key.vibekeyboard.databinding.DialogRecommendedBinding;

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

public class RecommendedDialog extends DialogFragment {

    private DialogRecommendedBinding binding;  // 绑定布局文件
    private List<WallpaperInfo> list = new ArrayList<>();  // 存储壁纸信息的列表
    private WallpaperInfo wallpaperInfo;  // 当前选择的壁纸信息

    // 设置壁纸列表
    public void setList(List<WallpaperInfo> list) {
        this.list = list;
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        // 将布局文件与视图绑定
        binding = DialogRecommendedBinding.inflate(inflater, container, false);
        return binding.getRoot();
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        // 初始化对话框设置
        Dialog dialog = getDialog();
        setCancelable(true);  // 设置为 true 对话框可点击外面取消
        if (dialog != null && dialog.getWindow() != null) {
            Window window = dialog.getWindow();
            window.setLayout((int) (getResources().getDisplayMetrics().widthPixels * 0.9), WindowManager.LayoutParams.WRAP_CONTENT);
        }

        // 随机选择一个壁纸
        Random random = new Random();
        int randomIndex = random.nextInt(list.size());
        wallpaperInfo = list.get(randomIndex);  // 获取随机的壁纸信息

        List<WallpaperInfo> limitedList = list.subList(0, Math.min(20, list.size()));

        // 加载图像
        loadImage();

        // 点击图片后进入下载界面
        binding.imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(requireContext(), DownloadActivity.class);
                // 将选中的壁纸信息传递给下一个 Activity
                intent.putExtra("wallpaperInfo", wallpaperInfo);  // wallpaperInfo 已经实现了 Parcelable
                // 将壁纸列表传递给下一个 Activity
                intent.putParcelableArrayListExtra("list", new ArrayList<>(limitedList));  // list 中的 WallpaperInfo 对象实现了 Parcelable
                dismiss();  // 关闭当前对话框
                requireContext().startActivity(intent);  // 启动下载界面
            }
        });
    }

    // 加载图像的方法
    private void loadImage() {
        // 判断壁纸的预览图 URL 是否有效
        if (wallpaperInfo.getPreview() != null && !wallpaperInfo.getPreview().isEmpty()) {
            // 设置图像的加载选项
            RequestOptions options = new RequestOptions()
                    .placeholder(R.mipmap.splash)
                    .error(R.mipmap.splash)
                    .transform(new CenterCrop())  // 中心裁剪，保证图片填满控件
                    .transform(new RoundedCorners(16));  // 设置圆角，16px

            // 使用 Glide 加载图像
            Glide.with(requireContext())
                    .asDrawable()  // 指定加载为 Drawable
                    .load(wallpaperInfo.getPreview())  // 设置要加载的图片 URL
                    .apply(options)  // 应用上面定义的加载选项
                    .into(binding.imageView);  // 设置到 ImageView 上显示
        } else {
            // 如果预览图 URL 为空，显示默认图像
            binding.imageView.setImageResource(R.mipmap.splash);  // 默认图像
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        binding = null;
    }
}
