import SwiftUI

public enum GlassType {
    case regular
    case clear

    @available(iOS 26.0, *)
    var systemGlassType: Glass {
        switch self {
        case .regular: return .regular
        case .clear: return .clear
        }
    }
}

public extension View {
    @ViewBuilder
    func glassBackground<S: Shape, Style: ShapeStyle>(shape: S = .rect(cornerRadius: 8),
                                                      type: GlassType? = .regular,
                                                      fallbackStyle: Style,
                                                      interactive: Bool = false) -> some View {
        if #available(iOS 26.0, *), let type {
            self
                .clipShape(shape)
                .glassEffect(type.systemGlassType.interactive(interactive), in: shape)
                .background {
                    // Used to prioritize the current color scheme
                    if !interactive {
                        shape
                            .fill(.background)
                            .opacity(0.2)
                    }
                }
        } else {
            self
                .background(fallbackStyle)
                .clipShape(shape)
        }
    }

    @ViewBuilder
    func glassEffectContainer() -> some View {
        if #available(iOS 26.0, *) {
            GlassEffectContainer {
                self
            }
        } else {
            self
        }
    }

    @ViewBuilder
    func scrollEdgeEffect(hidden: Bool, for edges: Edge.Set) -> some View {
        if #available(iOS 26.0, *) {
            self.scrollEdgeEffectHidden(hidden, for: edges)
        } else {
            self
        }
    }
}
