import Foundation
import IOKit.pwr_mgt

struct ScreenSaverManager {
    static var shared = ScreenSaverManager()

    var noSleepAssertion: IOPMAssertionID = 0
    var noSleepReturn: IOReturn?

    var enabled: Bool {
        noSleepReturn == nil
    }

    @discardableResult mutating func disable(reason: String = "Unknown reason") -> Bool {
        guard enabled else {
            return false
        }

        noSleepReturn = IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep as CFString,
                                                    IOPMAssertionLevel(kIOPMAssertionLevelOn),
                                                    reason as CFString,
                                                    &noSleepAssertion)
        return noSleepReturn == kIOReturnSuccess
    }

    @discardableResult mutating func enable() -> Bool {
        if noSleepReturn != nil {
            _ = IOPMAssertionRelease(noSleepAssertion) == kIOReturnSuccess
            noSleepReturn = nil
            return true
        }
        return false
    }
}