package xn.xxp.main.risk;

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

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;

import com.shuyu.gsyvideoplayer.GSYVideoManager;
import com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder;
import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack;
import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer;

import java.lang.ref.WeakReference;

import xn.xxp.R;

/**
 * 全屏视频播放对话框Fragment
 * 功能特性：
 * 1. 基于DialogFragment实现，自动管理生命周期
 * 2. 集成GSYVideoPlayer实现视频播放功能
 * 3. 支持单例复用，避免重复创建
 * 4. 自动处理Activity销毁时的资源释放
 * 5. 支持全屏播放和手势控制
 * 注意事项：
 * - 必须添加网络权限和视频缓存权限
 * - 建议在Manifest中配置configChanges防止旋转黑屏
 * - 需依赖GSYVideoPlayer库
 */
public class VideoDialogFragment extends DialogFragment {

    private StandardGSYVideoPlayer videoPlayer; // 视频播放器核心组件
    private String videoUrl;                    // 当前播放视频URL
    private String videoTitle;                  // 视频标题
    private LifecycleObserver lifecycleObserver;// Activity生命周期观察者

    /**
     * 使用弱引用管理实例，防止内存泄漏
     * WeakReference在内存不足时会被GC回收，避免DialogFragment无法释放
     */
    private static WeakReference<VideoDialogFragment> weakInstance;

    /**
     * 获取对话框实例（单例模式）
     *
     * @param url   视频播放地址
     * @param title 视频标题
     * @return 已配置好的对话框实例
     */
    public static VideoDialogFragment newInstance(String url, String title) {
        // 尝试从弱引用获取现有实例
        VideoDialogFragment instance = (weakInstance != null) ? weakInstance.get() : null;

        if (instance == null) {
            instance = new VideoDialogFragment();
            weakInstance = new WeakReference<>(instance);
        }
        instance.setVideoData(url, title); // 更新数据
        return instance;
    }

    /**
     * 设置视频数据（用于实例复用）
     *
     * @param url   视频地址
     * @param title 视频标题
     */
    private void setVideoData(String url, String title) {
        this.videoUrl = url;
        this.videoTitle = title;
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 设置对话框样式为全屏
        setStyle(DialogFragment.STYLE_NORMAL, R.style.FullScreenDialog);
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
        // 创建无标题栏对话框
        Dialog dialog = super.onCreateDialog(savedInstanceState);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        return dialog;
    }

    /**
     * 绑定到Activity时注册生命周期监听
     * 用于在Activity销毁时自动关闭对话框
     */
    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);

        if (context instanceof FragmentActivity) {
            FragmentActivity activity = (FragmentActivity) context;

            // 创建生命周期观察者
            lifecycleObserver = new LifecycleObserver() {
                /**
                 * 监听Activity销毁事件
                 * 当宿主Activity被销毁时自动关闭对话框
                 */
                @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
                void onActivityDestroy() {
                    if (isAdded()) { // 检查Fragment是否已添加
                        dismissAllowingStateLoss(); // 允许状态丢失的关闭方式
                    }
                }
            };

            // 注册观察者
            activity.getLifecycle().addObserver(lifecycleObserver);
        }
    }

    /**
     * 创建视图时初始化播放器
     */
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater,
                             @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.dialog_video, container, false);
        initVideoPlayer(root); // 初始化播放器
        return root;
    }

    /**
     * 恢复时重启视频播放
     */
    @Override
    public void onResume() {
        super.onResume();
        if (videoPlayer != null) {
            videoPlayer.onVideoResume(); // GSYVideoPlayer的恢复方法
        }
    }

    /**
     * 暂停时停止视频播放
     */
    @Override
    public void onPause() {
        super.onPause();
        if (videoPlayer != null) {
            videoPlayer.onVideoPause(); // GSYVideoPlayer的暂停方法
        }
    }

    /**
     * 视图销毁时释放播放器资源
     */
    @Override
    public void onDestroyView() {
        releasePlayer();
        super.onDestroyView();
    }

    /**
     * 解绑时移除生命周期观察者
     */
    @Override
    public void onDetach() {
        if (getActivity() != null && lifecycleObserver != null) {
            getActivity().getLifecycle().removeObserver(lifecycleObserver);
        }
        super.onDetach();
    }

    /**
     * 完全销毁时清理静态引用
     */
    @Override
    public void onDestroy() {
        releasePlayer();
        if (weakInstance != null) {
            weakInstance.clear(); // 清除弱引用
        }
        super.onDestroy();
    }

    /**
     * 初始化视频播放器
     *
     * @param root 根视图
     */
    private void initVideoPlayer(View root) {
        videoPlayer = root.findViewById(R.id.video_player);

        // 配置播放器选项
        GSYVideoOptionBuilder gsyOption = new GSYVideoOptionBuilder();
        gsyOption.setIsTouchWiget(true)        // 启用触摸手势
                .setNeedShowWifiTip(false)     // 是否需要显示流量提示,默认true
                .setRotateViewAuto(false)      // 禁用自动旋转
                .setLockLand(false)            // 禁用横屏锁定
                .setAutoFullWithSize(true)     // 根据尺寸自动全屏
                .setShowFullAnimation(false)   // 禁用全屏动画
                .setNeedLockFull(true)         // 需要全屏锁定
                .setUrl(videoUrl)              // 设置视频地址
                .setCacheWithPlay(false)        // 边播边缓存

                .setVideoTitle(videoTitle)     // 设置视频标题
                .setVideoAllCallBack(new GSYSampleCallBack() {
                    /**
                     * 视频播放完成回调
                     */
                    @Override
                    public void onAutoComplete(String url, Object... objects) {
                        super.onAutoComplete(url, objects);
                        dismiss(); // 自动关闭对话框
                    }
                })
                .build(videoPlayer);

        // 自定义播放器UI
        videoPlayer.getFullscreenButton().setVisibility(View.GONE); // 隐藏全屏按钮
        videoPlayer.getBackButton().setVisibility(View.VISIBLE);    // 显示返回按钮
        videoPlayer.getBackButton().setOnClickListener(v -> dismiss());
        // 开始播放逻辑
        videoPlayer.startPlayLogic();
    }

    /**
     * 释放播放器资源
     */
    private void releasePlayer() {
        if (videoPlayer != null) {
            videoPlayer.release(); // 释放播放器

            // 清除视频缓存（可选配置）
            GSYVideoManager.instance().clearAllDefaultCache(getContext());

            videoPlayer = null; // 置空防止内存泄漏
        }
    }
}