import Localization
import SwiftUI

public struct ModelPreviewUpgradeButton: View {
    var filled = false
    var action: () -> Void = {}

    @Environment(\.colorScheme) var colorScheme

    public init(filled: Bool = false, action: @escaping () -> Void = {}) {
        self.filled = filled
        self.action = action
    }

    public var body: some View {
        Button(action: action) {
            content
        }
        .buttonStyle(ScaleButtonStyle(scaleAmount: 0.975))
    }

    public var content: some View {
        Text(L10n.FeatureClipList.unlockForFullAccess)
            .typographyV1(.caption2.kerning(0.05).neueMontrealMedium())
            .padding(.horizontal, Constants.horizontalPadding)
            .padding(.vertical, Constants.verticalPadding)
            .foregroundStyle(foregroundStyle)
            .lineLimit(1)
            .minimumScaleFactor(0.8)
            .background {
                if filled {
                    Capsule()
                        .fill(Color.white)
                        .opacity(0.85)
                        .glassBackground(shape: .capsule, fallbackStyle: .ultraThinMaterial)
                } else {
                    Capsule()
                        .strokeBorder(Color.SemanticV1.textPrimary, lineWidth: 1)
                        .opacity(0.1)
                }
            }
    }

    var foregroundStyle: some ShapeStyle {
        if filled {
            LinearGradient(
                colors: [Constants.strawberry1, Constants.strawberry1.opacity(0.7)],
                startPoint: .leading,
                endPoint: .trailing
            )
        } else if colorScheme == .light {
            LinearGradient(
                colors: [Constants.strawberry1, Constants.strawberry2Light],
                startPoint: .trailing,
                endPoint: .leading
            )
        } else {
            LinearGradient(
                colors: [Constants.strawberry1, Constants.strawberry2Dark],
                startPoint: .trailing,
                endPoint: .leading
            )
        }
    }

    enum Constants {
        static let horizontalPadding = 12.0
        static let verticalPadding = 6.0
        static let strawberry1: Color = Color.PaletteV2.strawberry600
        static let strawberry2Dark: Color = Color.PaletteV2.strawberry800
        static let strawberry2Light: Color = Color.PaletteV2.strawberry400
    }
}
