import { BooleanOption, EnumOption, StringOption, getOptionValues, } from "../../RendererOptions/index.js";
import { TargetLanguage } from "../../TargetLanguage.js";
import { ObjectiveCRenderer } from "./ObjectiveCRenderer.js";
import { DEFAULT_CLASS_PREFIX } from "./utils.js";
export const objectiveCOptions = {
    features: new EnumOption("features", "Interface and implementation", {
        all: { interface: true, implementation: true },
        interface: { interface: true, implementation: false },
        implementation: { interface: false, implementation: true },
    }, "all"),
    justTypes: new BooleanOption("just-types", "Plain types only", false),
    marshallingFunctions: new BooleanOption("functions", "C-style functions", false),
    classPrefix: new StringOption("class-prefix", "Class prefix", "PREFIX", DEFAULT_CLASS_PREFIX),
    extraComments: new BooleanOption("extra-comments", "Extra comments", false),
};
export const objectiveCLanguageConfig = {
    displayName: "Objective-C",
    names: ["objc", "objective-c", "objectivec"],
    extension: "m",
};
export class ObjectiveCTargetLanguage extends TargetLanguage {
    constructor() {
        super(objectiveCLanguageConfig);
    }
    getOptions() {
        return objectiveCOptions;
    }
    makeRenderer(renderContext, untypedOptionValues) {
        return new ObjectiveCRenderer(this, renderContext, getOptionValues(objectiveCOptions, untypedOptionValues));
    }
}
