//
//  AppFont.swift
//  suixinkan
//

import UIKit

/// 应用字体层级，基于 8pt 网格与 SF Pro（System）。
enum AppFont {

    case caption
    case captionMedium
    case body
    case bodyMedium
    case subtitle
    case title
    case metric
    case display

    /// 对应 UIFont。
    var uiFont: UIFont {
        switch self {
        case .caption:
            return .systemFont(ofSize: 12, weight: .regular)
        case .captionMedium:
            return .systemFont(ofSize: 12, weight: .medium)
        case .body:
            return .systemFont(ofSize: 14, weight: .regular)
        case .bodyMedium:
            return .systemFont(ofSize: 14, weight: .medium)
        case .subtitle:
            return .systemFont(ofSize: 16, weight: .medium)
        case .title:
            return .systemFont(ofSize: 16, weight: .bold)
        case .metric:
            return .systemFont(ofSize: 18, weight: .bold)
        case .display:
            return .systemFont(ofSize: 28, weight: .semibold)
        }
    }

    /// 将字体应用到 UILabel。
    func apply(to label: UILabel) {
        label.font = uiFont
    }
}

extension UIFont {

    /// 通过 `AppFont` 获取系统字体。
    static func app(_ style: AppFont) -> UIFont {
        style.uiFont
    }
}
