//
//  InterfaceExtensions.swift
//  JustOneThing
//
//  Created by Alan Francis on 06/07/2023.
//

import SwiftUI


extension Color {
    static func randomForegroundColor(_ colorScheme:ColorScheme = .light) -> Color {
        if( colorScheme == .light ) {
            return Color(red: .random(in: 0...0.5),
                         green: .random(in: 0...0.5),
                         blue: .random(in: 0...0.5))
        } else {
            return Color(red: .random(in: 0.5...1.0),
                         green: .random(in: 0.5...1.0),
                         blue: .random(in: 0.5...1.0))
        }
    }
}

public struct FitSystemFont: ViewModifier {
    public var lineLimit: Int?
    public var fontSize: CGFloat?
    public var minimumScaleFactor: CGFloat
    public var percentage: CGFloat
    
    func rightSize(geometry:GeometryProxy) -> CGFloat {
        min(
            min(geometry.size.width, geometry.size.height) * percentage,
            fontSize ?? CGFloat.greatestFiniteMagnitude
        )
    }

    public func body(content: Content) -> some View {
        GeometryReader { geometry in
            content
                .font(.system(size: rightSize(geometry: geometry),
                              weight: .bold,
                              design: .rounded))
                .bold()
                .lineLimit(self.lineLimit)
                .minimumScaleFactor(self.minimumScaleFactor)
                .position(x: geometry.frame(in: .local).midX, y: geometry.frame(in: .local).midY)
        }
    }
}

public extension View {
    func fitSystemFont(lineLimit: Int? = nil, fontSize: CGFloat? = nil, minimumScaleFactor: CGFloat = 0.01, percentage: CGFloat = 1) -> ModifiedContent<Self, FitSystemFont> {
        return modifier(FitSystemFont(lineLimit: lineLimit, fontSize: fontSize, minimumScaleFactor: minimumScaleFactor, percentage: percentage))
    }
}
