package cc.winboll.studio.powerbell.dialogs;

import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.ToastUtils;
import cc.winboll.studio.powerbell.R;
import cc.winboll.studio.powerbell.utils.PictureUtils;
import cc.winboll.studio.powerbell.views.BackgroundView;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

/**
 * @Author ZhanGSKen&豆包大模型<zhangsken@qq.com>
 * @Date 2025/11/19 20:11
 * @Describe 网络后台使用提示对话框
 * 继承 AndroidX AlertDialog，绑定自定义布局 dialog_networkbackground.xml
 */
public class NetworkBackgroundDialog extends AlertDialog {
    public static final String TAG = "NetworkBackgroundDialog";
    // 消息标识：图片加载成功
    private static final int MSG_IMAGE_LOAD_SUCCESS = 1001;
    // 消息标识：图片加载失败
    private static final int MSG_IMAGE_LOAD_FAILED = 1002;

    // 控件引用
    private TextView tvTitle;
    private TextView tvContent;
    private Button btnCancel;
    private Button btnConfirm;
    private Button btnPreview;
    private EditText etURL;
    BackgroundView bvBackgroundPreview;
    Context mContext;
    // 主线程 Handler，用于接收子线程消息并更新 UI
    private Handler mUiHandler;
	String previewFilePath;

    // 按钮点击回调接口（Java7 接口实现）
    public interface OnDialogClickListener {
        void onConfirm(); // 确认按钮点击
        void onCancel();  // 取消按钮点击
    }

    private OnDialogClickListener listener;

    // Java7 显式构造（必须传入 Context）
    public NetworkBackgroundDialog(@NonNull Context context) {
        super(context);
        initHandler(); // 初始化 Handler
        initView(); // 初始化布局和控件
        setDismissListener(); // 设置对话框消失监听
    }

    // 带回调的构造（便于外部处理点击事件）
    public NetworkBackgroundDialog(@NonNull Context context, OnDialogClickListener listener) {
        super(context);
        this.listener = listener;
        initHandler(); // 初始化 Handler
        initView();
        setDismissListener(); // 设置对话框消失监听
    }

    /**
     * 初始化主线程 Handler，用于更新 UI
     */
    private void initHandler() {
        mUiHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                // 对话框已消失时，不再处理 UI 消息
                if (!isShowing()) {
                    return;
                }
                switch (msg.what) {
                    case MSG_IMAGE_LOAD_SUCCESS:
                        // 图片加载成功，获取文件路径并设置背景
                        String filePath = (String) msg.obj;
                        setBackgroundFromPath(filePath);
                        break;
                    case MSG_IMAGE_LOAD_FAILED:
                        // 图片加载失败，设置默认背景
                        bvBackgroundPreview.setBackgroundResource(R.drawable.ic_launcher);
                        ToastUtils.show("图片预览失败，请检查链接");
                        break;
                }
            }
        };
    }

    /**
     * 设置对话框消失监听：移除 Handler 消息，避免内存泄漏
     */
    private void setDismissListener() {
        this.setOnDismissListener(new OnDismissListener() {
				@Override
				public void onDismiss(DialogInterface dialog) {
					// 对话框消失时，移除所有未处理的消息和回调
					if (mUiHandler != null) {
						mUiHandler.removeCallbacksAndMessages(null);
					}
					LogUtils.d(TAG, "对话框已消失，Handler 消息已清理");
				}
			});
    }

    /**
     * 初始化布局和控件
     */
    private void initView() {
        mContext = this.getContext();
        // 加载自定义布局
        View dialogView = LayoutInflater.from(getContext())
			.inflate(R.layout.dialog_networkbackground, null);
        // 设置对话框内容视图
        setView(dialogView);

        // 绑定控件
        tvTitle = (TextView) dialogView.findViewById(R.id.tv_dialog_title);
        tvContent = (TextView) dialogView.findViewById(R.id.tv_dialog_content);
        btnCancel = (Button) dialogView.findViewById(R.id.btn_cancel);
        btnConfirm = (Button) dialogView.findViewById(R.id.btn_confirm);
        btnPreview = (Button) dialogView.findViewById(R.id.btn_preview);
        etURL = (EditText) dialogView.findViewById(R.id.et_url);
        bvBackgroundPreview = (BackgroundView) dialogView.findViewById(R.id.bv_background_preview);

        // 设置按钮点击事件
        setButtonClickListeners();
    }

    /**
     * 设置按钮点击监听
     */
    private void setButtonClickListeners() {
        // 取消按钮：关闭对话框 + 回调外部
        btnCancel.setOnClickListener(new View.OnClickListener() {
				@Override
				public void onClick(View v) {
					LogUtils.d("NetworkBackgroundDialog", "取消按钮点击");
					dismiss(); // 关闭对话框
					if (listener != null) {
						listener.onCancel();
					}
				}
			});

        // 确认按钮：关闭对话框 + 回调外部
        btnConfirm.setOnClickListener(new View.OnClickListener() {
				@Override
				public void onClick(View v) {
					LogUtils.d("NetworkBackgroundDialog", "确认按钮点击");
					// 确定预览背景资源
					bvBackgroundPreview.saveToBackgroundSources(previewFilePath);

					dismiss(); // 关闭对话框
					if (listener != null) {
						listener.onConfirm();
					}
				}
			});

        // 图片预览按钮：预览输入框地址图片
        btnPreview.setOnClickListener(new View.OnClickListener() {
				@Override
				public void onClick(View v) {
					LogUtils.d("NetworkBackgroundDialog", "确认预览点击");
					downloadImageToAlbumAndPreview();
					/*String url = etURL.getText().toString().trim();
					 if (url.isEmpty()) {
					 ToastUtils.show("请输入图片链接");
					 return;
					 }
					 ImageDownloader.getInstance(mContext).downloadImage(url, mDownloadCallback);*/
				}
			});
    }

    /**
     * 根据文件路径设置 BackgroundView 背景（主线程调用）
     * @param filePath 图片文件路径
     */
    private void setBackgroundFromPath(String filePath) {
        FileInputStream fis = null;
        try {
            File imageFile = new File(filePath);
            if (!imageFile.exists()) {
                LogUtils.e(TAG, "图片文件不存在：" + filePath);
				ToastUtils.show("Test");
                //bvBackgroundPreview.setBackgroundResource(R.drawable.ic_launcher);
                return;
            }

			// 预览背景
			previewFilePath = filePath;
            bvBackgroundPreview.previewBackgroundImage(previewFilePath);

            LogUtils.d(TAG, "图片预览成功：" + filePath);

        } catch (Exception e) {
            e.printStackTrace();
            bvBackgroundPreview.setBackgroundResource(R.drawable.ic_launcher);
            LogUtils.e(TAG, "图片预览失败：" + e.getMessage());
        } finally {
            // Java7 手动关闭流，避免资源泄漏
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 对外提供方法：修改对话框标题（灵活适配不同场景）
     */
    public void setTitle(String title) {
        if (tvTitle != null) {
            tvTitle.setText(title);
        }
    }

    /**
     * 对外提供方法：修改对话框内容（灵活适配不同场景）
     */
    public void setContent(String content) {
        if (tvContent != null) {
            tvContent.setText(content);
        }
    }

    /**
     * 对外提供方法：设置按钮点击回调（替代带参构造）
     */
    public void setOnDialogClickListener(OnDialogClickListener listener) {
        this.listener = listener;
    }

    /*ImageDownloader.DownloadCallback mDownloadCallback = new ImageDownloader.DownloadCallback() {
	 @Override
	 public void onSuccess(String filePath) {
	 ToastUtils.show("图片下载成功：" + filePath);
	 LogUtils.d(TAG, filePath);
	 // 发送消息到主线程，携带图片路径
	 Message successMsg = mUiHandler.obtainMessage(MSG_IMAGE_LOAD_SUCCESS, filePath);
	 mUiHandler.sendMessage(successMsg);
	 }

	 @Override
	 public void onFailure(String errorMsg) {
	 ToastUtils.show("下载失败：" + errorMsg);
	 LogUtils.e(TAG, errorMsg);
	 // 发送图片加载失败消息
	 mUiHandler.sendEmptyMessage(MSG_IMAGE_LOAD_FAILED);
	 }
	 };*/

	void downloadImageToAlbumAndPreview() {
		//String imgUrl = "https://example.com/test.jpg";
		String imgUrl = etURL.getText().toString();
		PictureUtils.downloadImageToAlbum(mContext, imgUrl, new PictureUtils.DownloadCallback(){
				@Override
				public void onSuccess(String savePath) {
					ToastUtils.show("下载成功：" + savePath);
					// 发送消息到主线程，携带图片路径
					Message successMsg = mUiHandler.obtainMessage(MSG_IMAGE_LOAD_SUCCESS, savePath);
					mUiHandler.sendMessage(successMsg);
				}

				@Override
				public void onFailure(Exception e) {
					ToastUtils.show("下载失败：" + e.getMessage());
				}
			});

	}
}

