import SwiftUI

struct OutOfCreditsAlert: ViewModifier {
    @Binding var isPresented: Bool
    let onUpgrade: (() -> Void)?
    
    init(isPresented: Binding<Bool>, onUpgrade: (() -> Void)? = nil) {
        self._isPresented = isPresented
        self.onUpgrade = onUpgrade
    }
    
    func body(content: Content) -> some View {
        content
            .customAlert(
                isPresented: $isPresented,
                title: "Out of credits",
                message: "Come back tomorrow for more, or upgrade now to keep making music without limits.",
                primaryButtonTitle: "Upgrade",
                secondaryButtonTitle: "Not now",
                onPrimaryAction: {
                    onUpgrade?()
                }
            )
    }
}

extension View {
    func outOfCreditsAlert(
        isPresented: Binding<Bool>,
        onUpgrade: (() -> Void)? = nil
    ) -> some View {
        self.modifier(OutOfCreditsAlert(isPresented: isPresented, onUpgrade: onUpgrade))
    }
}
