import { CallableMessage } from '@typespec/compiler';
import { CreateSdkContextOptions } from '@azure-tools/typespec-client-generator-core';
import { Diagnostic } from '@typespec/compiler';
import { DiagnosticReport } from '@typespec/compiler';
import { EmitContext } from '@typespec/compiler';
import { JSONSchemaType } from '@typespec/compiler';
import { Program } from '@typespec/compiler';
import { SdkEmitterOptions } from '@azure-tools/typespec-client-generator-core';
import { Tracer } from '@typespec/compiler';

export declare function $onEmit(context: EmitContext<NetEmitterOptions>): Promise<void>;

export declare const configurationFileName = "Configuration.json";

export declare const createDiagnostic: <C extends "no-apiVersion" | "no-route" | "invalid-name" | "general-warning" | "general-error", M extends keyof {
    "no-apiVersion": {
        readonly default: CallableMessage<["service"]>;
    };
    "no-route": {
        readonly default: CallableMessage<["service"]>;
    };
    "invalid-name": {
        readonly default: CallableMessage<["name"]>;
    };
    "general-warning": {
        readonly default: CallableMessage<["message"]>;
    };
    "general-error": {
        readonly default: CallableMessage<["message"]>;
    };
}[C]>(diag: DiagnosticReport<    {
"no-apiVersion": {
readonly default: CallableMessage<["service"]>;
};
"no-route": {
readonly default: CallableMessage<["service"]>;
};
"invalid-name": {
readonly default: CallableMessage<["name"]>;
};
"general-warning": {
readonly default: CallableMessage<["message"]>;
};
"general-error": {
readonly default: CallableMessage<["message"]>;
};
}, C, M>) => Diagnostic;

export declare const defaultOptions: {
    "api-version": string;
    outputFile: string;
    logFile: string;
    skipSDKGeneration: boolean;
    "new-project": boolean;
    "clear-output-folder": boolean;
    "save-inputs": boolean;
    "generate-protocol-methods": boolean;
    "generate-convenience-methods": boolean;
    "package-name": undefined;
    debug: undefined;
    "models-to-treat-empty-string-as-null": undefined;
    "additional-intrinsic-types-to-treat-empty-string-as-null": never[];
    "methods-to-keep-client-default-value": undefined;
    "deserialize-null-collection-as-null-value": undefined;
    logLevel: LoggerLevel;
    flavor: undefined;
    "generate-test-project": boolean;
    "plugin-name": string;
    "emitter-extension-path": undefined;
};

export declare const getTracer: (program: Program) => Tracer;

export declare class Logger {
    private static instance;
    private initialized;
    private tracer;
    private level;
    private program;
    private constructor();
    static initialize(program: Program, level: LoggerLevel): void;
    static getInstance(): Logger;
    info(message: string): void;
    debug(message: string): void;
    verbose(message: string): void;
    warn(message: string): void;
    error(message: string): void;
}

export declare enum LoggerLevel {
    INFO = "info",
    DEBUG = "debug",
    VERBOSE = "verbose"
}

export declare interface NetEmitterOptions extends SdkEmitterOptions {
    "api-version"?: string;
    outputFile?: string;
    logFile?: string;
    namespace: string;
    "library-name": string;
    "single-top-level-client"?: boolean;
    skipSDKGeneration?: boolean;
    "unreferenced-types-handling"?: "removeOrInternalize" | "internalize" | "keepAll";
    "new-project"?: boolean;
    "clear-output-folder"?: boolean;
    "save-inputs"?: boolean;
    "model-namespace"?: boolean;
    "existing-project-folder"?: string;
    "keep-non-overloadable-protocol-signature"?: boolean;
    debug?: boolean;
    "models-to-treat-empty-string-as-null"?: string[];
    "additional-intrinsic-types-to-treat-empty-string-as-null"?: string[];
    "methods-to-keep-client-default-value"?: string[];
    "deserialize-null-collection-as-null-value"?: boolean;
    logLevel?: LoggerLevel;
    "package-dir"?: string;
    "head-as-boolean"?: boolean;
    flavor?: string;
    "generate-sample-project"?: boolean;
    "generate-test-project"?: boolean;
    "use-model-reader-writer"?: boolean;
    "disable-xml-docs"?: boolean;
    "plugin-name"?: string;
    "emitter-extension-path"?: string;
}

export declare const NetEmitterOptionsSchema: JSONSchemaType<NetEmitterOptions>;

export declare const reportDiagnostic: <C extends "no-apiVersion" | "no-route" | "invalid-name" | "general-warning" | "general-error", M extends keyof {
    "no-apiVersion": {
        readonly default: CallableMessage<["service"]>;
    };
    "no-route": {
        readonly default: CallableMessage<["service"]>;
    };
    "invalid-name": {
        readonly default: CallableMessage<["name"]>;
    };
    "general-warning": {
        readonly default: CallableMessage<["message"]>;
    };
    "general-error": {
        readonly default: CallableMessage<["message"]>;
    };
}[C]>(program: Program, diag: DiagnosticReport<    {
"no-apiVersion": {
readonly default: CallableMessage<["service"]>;
};
"no-route": {
readonly default: CallableMessage<["service"]>;
};
"invalid-name": {
readonly default: CallableMessage<["name"]>;
};
"general-warning": {
readonly default: CallableMessage<["message"]>;
};
"general-error": {
readonly default: CallableMessage<["message"]>;
};
}, C, M>) => void;

export declare function resolveOptions(context: EmitContext<NetEmitterOptions>): {
    outputFile: string;
    logFile: string;
    "api-version": string;
    namespace: string;
    "library-name": string;
    "single-top-level-client"?: boolean;
    skipSDKGeneration: boolean;
    "unreferenced-types-handling"?: "removeOrInternalize" | "internalize" | "keepAll";
    "new-project": boolean;
    "clear-output-folder": boolean;
    "save-inputs": boolean;
    "model-namespace"?: boolean;
    "existing-project-folder"?: string;
    "keep-non-overloadable-protocol-signature"?: boolean;
    debug: boolean;
    "models-to-treat-empty-string-as-null": string[];
    "additional-intrinsic-types-to-treat-empty-string-as-null": string[];
    "methods-to-keep-client-default-value": string[];
    "deserialize-null-collection-as-null-value": boolean;
    logLevel: LoggerLevel;
    "package-dir"?: string;
    "head-as-boolean"?: boolean;
    flavor: string;
    "generate-sample-project"?: boolean;
    "generate-test-project": boolean;
    "use-model-reader-writer"?: boolean;
    "disable-xml-docs"?: boolean;
    "plugin-name": string;
    "emitter-extension-path": string;
    "generate-protocol-methods": boolean;
    "generate-convenience-methods": boolean;
    "package-name": string;
    "flatten-union-as-enum"?: boolean;
    "examples-directory"?: string;
    "examples-dir"?: string;
};

export declare function resolveOutputFolder(context: EmitContext<NetEmitterOptions>): string;

export declare function setSDKContextOptions(options: CreateSdkContextOptions): void;

export declare const tspOutputFileName = "tspCodeModel.json";

export { }
