/** Copyright (c) MuteCode **/

declare module 'logsilo' {
  export interface SiloConfigOptions {
    private apiKey: string;
    private apiUrl: string;
    private application: string;
  }

  export class Silo {
    private siloLogo: string;
    private apiKey: string;
    private apiUrl: string;
    private application: string;

    constructor(apiKey: string, apiUrl: string, application: string);

    public showSiloArt(): void;
    public showConfig(): void;
    public console(log: SiloLog): string;
    public send(log: SiloLog): Promise<Response>;
  }

  export function create(config: SiloConfigOptions): Silo;

  export class SiloLog {
    public shortDescription: string;
    public detailedDescription?: string;
    public service?: string;
    public level?: number;
    public user?: string;
    public path?: string;
    public statusCode?: number;
    public timestamp?: Date;

    constructor({
      shortDescription,
      detailedDescription,
      service,
      level,
      user,
      path,
      statusCode,
      timestamp,
    }: SiloLog)
  }

  const silo: {
    create: typeof create;
  }

  export default silo;
}
