import { Document } from "../document"

export interface Config extends Document {
  type: ConfigType
}

export interface SMTPConfig extends Config {
  config: {
    port: number
    host: string
    from: string
    subject: string
    secure: boolean
  }
}

export interface SettingsConfig extends Config {
  config: {
    company: string
    logoUrl: string
    platformUrl: string
    uniqueTenantId?: string
  }
}

export interface GoogleConfig extends Config {
  config: {
    clientID: string
    clientSecret: string
    activated: boolean
  }
}

export interface OIDCConfig extends Config {
  config: {
    configs: {
      configUrl: string
      clientID: string
      clientSecret: string
      logo: string
      name: string
      uuid: string
      activated: boolean
    }[]
  }
}

export type NestedConfig =
  | SMTPConfig
  | SettingsConfig
  | GoogleConfig
  | OIDCConfig

export const isSettingsConfig = (config: Config): config is SettingsConfig =>
  config.type === ConfigType.SETTINGS
export const isSMTPConfig = (config: Config): config is SMTPConfig =>
  config.type === ConfigType.SMTP
export const isGoogleConfig = (config: Config): config is GoogleConfig =>
  config.type === ConfigType.GOOGLE
export const isOIDCConfig = (config: Config): config is OIDCConfig =>
  config.type === ConfigType.OIDC

export enum ConfigType {
  SETTINGS = "settings",
  SMTP = "smtp",
  GOOGLE = "google",
  OIDC = "oidc",
}
