import Foundation

public extension Tooltip {
    struct Configuration: Equatable, Sendable {
        public static func == (lhs: Configuration, rhs: Configuration) -> Bool {
            return lhs.anchor == rhs.anchor &&
                lhs.anchorObjectShadowRadius == rhs.anchorObjectShadowRadius &&
                lhs.spacing == rhs.spacing &&
                lhs.maxWidth == rhs.maxWidth &&
                lhs.bubbleStyle == rhs.bubbleStyle
        }

        public let anchor: Tooltip.Anchor
        public let anchorObjectShadowRadius: CGFloat
        public let spacing: CGFloat
        public let maxWidth: CGFloat
        public let bubbleStyle: BubbleStyle
        public var buttonStyle: ButtonStyle = .textLink

        public enum ButtonStyle: Equatable, Sendable {
            case textLink
            case auraButton
        }

        public struct BubbleStyle: Equatable, Sendable {
            let cornerRadius: CGFloat
            let triangleSize: CGFloat
            let triangleBase: CGFloat

            static let standard = BubbleStyle(
                cornerRadius: 16,
                triangleSize: 8,
                triangleBase: 12
            )

            static let lessRound = BubbleStyle(
                cornerRadius: 12,
                triangleSize: 8,
                triangleBase: 12
            )
        }
    }
}

public extension Tooltip.Configuration {
    static let moreButtonOnOmniPlayer = Tooltip.Configuration(
        anchor: Tooltip.Anchor.right(32),
        anchorObjectShadowRadius: 14,
        spacing: 8,
        maxWidth: 280,
        bubbleStyle: BubbleStyle.standard
    )

    static let moreButtonOnClipInClipList = Tooltip.Configuration(
        anchor: Tooltip.Anchor.right(42),
        anchorObjectShadowRadius: 14,
        spacing: 6,
        maxWidth: 265,
        bubbleStyle: BubbleStyle.standard
    )

    static let audioCreateStyle = Tooltip.Configuration(
        anchor: Tooltip.Anchor.up(8),
        anchorObjectShadowRadius: 14,
        spacing: 0,
        maxWidth: 350,
        bubbleStyle: BubbleStyle.standard
    )

    static let newModelAnnouncement = Tooltip.Configuration(
        anchor: Tooltip.Anchor.topLeft(13),
        anchorObjectShadowRadius: 14,
        spacing: 8,
        maxWidth: 260,
        bubbleStyle: BubbleStyle.lessRound,
        buttonStyle: .auraButton
    )
}
