//
//  FontsConfiguration+Runnable.swift
//  
//
//  Created by Thibaut Schmitt on 30/08/2022.
//

import Foundation

extension FontsConfiguration: Runnable {

    func run(projectDirectory: String, force: Bool) {
        let args = getArguments(projectDirectory: projectDirectory, force: force)
        Fonts.main(args)
    }

    func getArguments(projectDirectory: String, force: Bool) -> [String] {
        var args = [String]()

        if force {
            args += ["-f"]
        }

        args += [
            inputFile.prependIfRelativePath(projectDirectory)
        ]

        // Add optional parameters
        [
            ("--extension-output-path", extensionOutputPath?.prependIfRelativePath(projectDirectory)),
            ("--extension-name", extensionName),
            ("--extension-name-ui-kit", extensionNameUIKit),
            ("--extension-suffix", extensionSuffix),
            ("--visibility", visibility),
            ("--static-members", staticMembers?.description)
        ].forEach { argumentName, argumentValue in
            if let argumentValue {
                args += [
                    argumentName,
                    argumentValue
                ]
            }
        }

        // Add infoPlist paths
        if let infoPlistPaths {
            let adjustedPlistPaths = infoPlistPaths
                .split(separator: " ")
                .map { String($0).prependIfRelativePath(projectDirectory) }
                .joined(separator: " ")

            args += [
                "--info-plist-paths",
                adjustedPlistPaths
            ]
        }

        return args
    }
}
