import CoreGraphics
import CoreText
import UIKit

enum FontError: Swift.Error {
    case failedToRegisterFont
}

func registerFont(named name: String) throws {
    guard let asset = NSDataAsset(name: "Fonts/\(name)", bundle: Bundle.module),
          let provider = CGDataProvider(data: asset.data as NSData),
          let font = CGFont(provider),
          CTFontManagerRegisterGraphicsFont(font, nil) else {
        throw FontError.failedToRegisterFont
    }
}

struct PublicSansFont {
    let name: String

    private init(named name: String) {
        self.name = name
        do {
            try registerFont(named: name)
        } catch {
            let reason = error.localizedDescription
            fatalError("Failed to register font: \(reason)")
        }
    }

    static let light = PublicSansFont(named: "PublicSans-Light")
    static let regular = PublicSansFont(named: "PublicSans-Regular")
    static let medium = PublicSansFont(named: "PublicSans-Medium")
    static let semiBold = PublicSansFont(named: "PublicSans-SemiBold")
    static let bold = PublicSansFont(named: "PublicSans-Bold")
}