//
//  FontName.swift
//  
//
//  Created by Thibaut Schmitt on 29/08/2022.
//

import Foundation
import ToolCore

// swiftlint:disable no_grouping_extension

struct FontName: Hashable {

    let postscriptName: String
    let filename: String
    let fileExtension: String
}

extension FontName {

    var fontNameSanitize: String {
        postscriptName.removeCharacters(from: "[]+-_")
    }

    func getProperty(
        isStatic: Bool,
        isSwiftUI: Bool,
        visibility: ExtensionVisibility
    ) -> String {
        switch (isSwiftUI, isStatic) {
        case (true, true):
            // SwiftUI, Static => let
            """
                \(visibility) static let \(fontNameSanitize): ((_ size: CGFloat) -> Font) = { size in
                    Font.custom(FontName.\(fontNameSanitize).rawValue, size: size)
                }
            """

        case (true, false):
            // SwiftUI, Not Static => func
            """
                \(visibility) func \(fontNameSanitize)(withSize size: CGFloat) -> Font {
                    Font.custom(FontName.\(fontNameSanitize).rawValue, size: size)
                }
            """

        case (false, true):
            // UIKit, Static => let
            """
                \(visibility) static let \(fontNameSanitize): ((_ size: CGFloat) -> UIFont) = { size in
                    UIFont(name: FontName.\(fontNameSanitize).rawValue, size: size)!
                }
            """

        case (false, false):
            // UIKit, Not Static => func
            """
            \(visibility) func \(fontNameSanitize)(withSize size: CGFloat) -> UIFont {
                UIFont(name: FontName.\(fontNameSanitize).rawValue, size: size)!
            }
            """
        }
    }
}
