//
//  TSLoadingAnimation.swift
//  AIRingtone
//
//  Created by 100Years on 2025/3/4.
//

import Foundation
import UIKit

class TSLoadingAnimation {
    
    // 用于标记是否已经隐藏动画
    private static var isAnimationHidden = false
    
    /// 显示加载动画
    /// - Parameters:
    ///   - view: 需要显示加载动画的视图
    ///   - delay: 延迟显示的时间（默认 0.75 秒）
    static func showLoading(in view: UIView?, delay: TimeInterval = 0.75) {
        guard let view = view else { return }
        
        // 重置隐藏标记
        isAnimationHidden = false
        
        kDelayOnMainThread(delay) {
            // 如果动画没有被隐藏，则显示动画
            if !isAnimationHidden {
                TSToastShared.showLoading(containerView: view)
            }
        }
    }
    
    /// 隐藏加载动画
    static func hideLoading() {
        // 标记动画已隐藏
        isAnimationHidden = true
        TSToastShared.hideLoading()
    }
}


/// 封装的加载动画显示和隐藏逻辑闭包函数
/// - Parameters:
///   - delay: 延迟显示的时间（默认 0.75 秒）
///   - showBlock: 显示加载动画的闭包
///   - hideBlock: 隐藏加载动画的闭包
/// - Returns: 一个包含显示和隐藏功能的闭包，可通过调用该闭包的不同属性来显示或隐藏动画
func kCreateLoadingLogic(delay: TimeInterval = 0.5, showBlock: @escaping () -> Void, hideBlock: @escaping () -> Void) -> (show: () -> Void, hide: () -> Void) {
    var isAnimationHidden = false

    let showLoading = {
        isAnimationHidden = false
        DispatchQueue.main.asyncAfter(deadline: .now() + delay) {
            if !isAnimationHidden {
                showBlock()
                isAnimationHidden = true
            }
        }
    }

    let hideLoading = {
        if isAnimationHidden == true {
            DispatchQueue.main.async {
                hideBlock()
            }
        }else{
            isAnimationHidden = true
        }

    }

    return (show: showLoading, hide: hideLoading)
}
