//
// Swiftfin is subject to the terms of the Mozilla Public
// License, v2.0. If a copy of the MPL was not distributed with this
// file, you can obtain one at https://mozilla.org/MPL/2.0/.
//
// Copyright (c) 2024 Jellyfin & Jellyfin Contributors
//

import SwiftUI

// TODO: Rename to something more generic, non-proxy

class TimerProxy: ObservableObject {

    @Published
    var isActive = false

    private var stopWorkitem: DispatchWorkItem?

    func start(_ interval: Double) {
        isActive = true
        restartOverlayDismissTimer(interval: interval)
    }

    func stop() {
        isActive = false
    }

    /// Stops the timer without triggering an active update
    func pause() {
        stopWorkitem?.cancel()
    }

    private func restartOverlayDismissTimer(interval: Double) {
        stopWorkitem?.cancel()

        isActive = true

        let newWorkItem = DispatchWorkItem {
            self.stop()
        }

        stopWorkitem = newWorkItem

        DispatchQueue.main.asyncAfter(deadline: .now() + interval, execute: newWorkItem)
    }
}
