package com.fujica.abk.component;

import com.fujica.abk.ResourceTable;
import com.fujica.abk.utils.DialogUtil;
import ohos.agp.animation.Animator;
import ohos.agp.animation.AnimatorProperty;
import ohos.agp.components.AttrSet;
import ohos.agp.components.Component;
import ohos.agp.components.ComponentContainer;
import ohos.agp.components.DirectionalLayout;
import ohos.agp.components.Image;
import ohos.agp.components.LayoutScatter;
import ohos.agp.components.ProgressBar;
import ohos.agp.utils.Color;
import ohos.agp.utils.LayoutAlignment;
import ohos.app.Context;
import ohos.eventhandler.EventHandler;
import ohos.eventhandler.EventRunner;

/**
 * Loading组件类，继承DirectionalLayout
 * 全屏遮罩，中间显示loading，不可点击，不可取消
 * 使用方式：在 AbilitySlice 中定义为属性，初始化后添加到根布局
 */
public class LoadingComponent extends DirectionalLayout {
    private Component contentLayout;
    private Image loadingImage;
    private AnimatorProperty rotationAnimator;

    /**
     * 构造函数（用于代码创建）
     */
    public LoadingComponent(Context context) {
        super(context);
        initComponent(context);
    }

    /**
     * 构造函数（用于XML布局文件）
     */
    public LoadingComponent(Context context, AttrSet attrSet) {
        super(context, attrSet);
        initComponent(context);
    }

    /**
     * 构造函数（用于XML布局文件，带样式）
     */
    public LoadingComponent(Context context, AttrSet attrSet, String styleName) {
        super(context, attrSet, styleName);
        initComponent(context);
    }

    private void initComponent(Context context) {
        // 设置全屏布局属性
        setWidth(ComponentContainer.LayoutConfig.MATCH_PARENT);
        setHeight(ComponentContainer.LayoutConfig.MATCH_PARENT);
        setAlignment(LayoutAlignment.CENTER);
        setOrientation(VERTICAL);
        
        // 使用布局文件加载内容
        contentLayout = LayoutScatter.getInstance(context)
                .parse(ResourceTable.Layout_layout_loading_dialog, null, false);

        // 将内容布局添加到根布局中
        addComponent(contentLayout);
        
        // 获取图片组件
        Component imageComponent = contentLayout.findComponentById(ResourceTable.Id_loading_image);
        if (imageComponent instanceof Image) {
            loadingImage = (Image) imageComponent;
            // 创建旋转动画
            initRotationAnimation();
        }
        
        // 默认隐藏
        setVisibility(HIDE);
    }
    
    /**
     * 初始化旋转动画
     */
    private void initRotationAnimation() {
        if (loadingImage == null) {
            return;
        }
        
        // 先设置初始旋转角度为0
        loadingImage.setRotation(0f);
        
        // 创建旋转动画属性
        rotationAnimator = loadingImage.createAnimatorProperty();
        // 设置旋转动画（从当前位置旋转360度）
        rotationAnimator.rotate(360f);
        // 设置动画持续时间（2秒）
        rotationAnimator.setDuration(2000);
        // 不设置无限循环，而是通过监听器手动控制
        rotationAnimator.setLoopedCount(1);
        // 设置动画曲线为线性（匀速旋转）
        rotationAnimator.setCurveType(Animator.CurveType.LINEAR);
        
        // 添加动画状态监听器，在每次动画结束后重新启动
        rotationAnimator.setStateChangedListener(new Animator.StateChangedListener() {
            @Override
            public void onStart(Animator animator) {
            }
            
            @Override
            public void onStop(Animator animator) {
            }
            
            @Override
            public void onCancel(Animator animator) {
            }
            
            @Override
            public void onEnd(Animator animator) {
                // 每次动画结束时重置旋转角度为0，然后重新启动
                if (loadingImage != null && rotationAnimator != null && getVisibility() == VISIBLE) {
                    loadingImage.setRotation(0f);
                    // 延迟一小段时间后重新启动动画，实现连续旋转
                    DialogUtil.postTask(() -> {
                        if (rotationAnimator != null && loadingImage != null && getVisibility() == VISIBLE) {
                            rotationAnimator.start();
                        }
                    }, 10);
                }
            }
            
            @Override
            public void onPause(Animator animator) {
            }
            
            @Override
            public void onResume(Animator animator) {
            }
        });
    }
    
    /**
     * 显示Loading
     */
    public void show() {
        setVisibility(VISIBLE);
        // 延迟启动旋转动画，确保组件已完全渲染
        DialogUtil.postTask(() -> {
            if (rotationAnimator != null && loadingImage != null) {
                // 重置旋转角度
                loadingImage.setRotation(0f);
                // 如果动画正在运行，先停止
                if (rotationAnimator.isRunning()) {
                    rotationAnimator.stop();
                }
                // 启动动画
                rotationAnimator.start();
            }
        }, 100);
    }
    
    /**
     * 隐藏Loading
     */
    public void hide() {
        setVisibility(HIDE);
        // 停止旋转动画
        if (rotationAnimator != null && rotationAnimator.isRunning()) {
            rotationAnimator.stop();
        }
    }
    
    /**
     * 是否正在显示
     */
    public boolean isShowing() {
        return getVisibility() == VISIBLE;
    }
}

