export interface AppConfig {
  clientId: string;
  token: string;
  guildId?: string;
  prefix: string;
  httpHost: string;
  port: number;
}

function required(name: string): string {
  const value = process.env[name]?.trim();

  if (!value) {
    throw new Error(`${name} 환경 변수가 필요합니다.`);
  }

  return value;
}

export function loadConfig(): AppConfig {
  const guildId = process.env.DISCORD_GUILD_ID?.trim();
  const prefix = process.env.COMMAND_PREFIX?.trim() || "!";
  const httpHost = process.env.HTTP_HOST?.trim() || "0.0.0.0";
  const portText = process.env.PORT?.trim() || "6700";
  const port = Number(portText);

  if (!Number.isInteger(port) || port < 1 || port > 65_535) {
    throw new Error("PORT 환경 변수는 1~65535 사이의 정수여야 합니다.");
  }

  return {
    clientId: required("DISCORD_CLIENT_ID"),
    token: required("DISCORD_TOKEN"),
    ...(guildId ? { guildId } : {}),
    prefix,
    httpHost,
    port,
  };
}
