import { execFileSync } from 'node:child_process';

import type { AdapterName } from './options.js';

function readWordPressOptions(): Record<string, string> {
  const sql = "SELECT option_name, option_value FROM wp_options WHERE option_name IN ('ipz_api_key','ipz_license_key')";
  const output = execFileSync('podman', [
    'exec', 'devzone-db', 'mariadb', '-N', '-B', '-u', 'wordpress', '-pwordpress', 'wordpress', '-e', sql,
  ], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] });
  return Object.fromEntries(output.trim().split('\n').filter(Boolean).map((line) => {
    const tab = line.indexOf('\t');
    return [line.slice(0, tab), line.slice(tab + 1)];
  }));
}

export interface Credentials {
  valid?: string;
  revoked?: string;
  wrongPlugin?: string;
  insufficientCredits?: string;
  seatCapped?: string;
  forum?: string;
  forumInsufficientCredits?: string;
  staff?: string;
  license?: string;
  session?: string;
}

export function loadCredentials(adapter: AdapterName, env: NodeJS.ProcessEnv): Credentials {
  if (adapter === 'platform') {
    return {
      valid: env.PLATFORM_API_KEY ?? env.API_KEY,
      revoked: env.PLATFORM_REVOKED_API_KEY,
      wrongPlugin: env.PLATFORM_WRONG_PLUGIN_API_KEY,
      insufficientCredits: env.PLATFORM_INSUFFICIENT_CREDITS_API_KEY,
      seatCapped: env.PLATFORM_SEAT_CAPPED_API_KEY,
      forum: env.PLATFORM_FORUM_API_KEY,
      forumInsufficientCredits: env.PLATFORM_FORUM_INSUFFICIENT_CREDITS_API_KEY,
      staff: env.PLATFORM_STAFF_TOKEN,
      license: env.PLATFORM_LICENSE_KEY,
      session: env.PLATFORM_SESSION_TOKEN,
    };
  }
  if (env.LEGACY_API_KEY ?? env.API_KEY) {
    return { valid: env.LEGACY_API_KEY ?? env.API_KEY, license: env.LEGACY_LICENSE_KEY };
  }
  const options = readWordPressOptions();
  return { valid: options.ipz_api_key, license: options.ipz_license_key };
}
