import { translateWithGlm, isGlmConfigured } from './glmClient.js';

const AVAILABLE_PROVIDERS = {
  glm: {
    id: 'glm',
    label: 'GLM / Anthropic',
    isConfigured: () => isGlmConfigured(),
    translate: translateWithGlm,
    envKeys: ['ZAI_GLM_API_KEY', 'ANTHROPIC_API_KEY'],
  },
  openai: {
    id: 'openai',
    label: 'OpenAI ChatGPT',
    isConfigured: () => Boolean(process.env.OPENAI_API_KEY),
    translate: async () => {
      throw new Error('OpenAI çeviri modeli henüz yapılandırılmadı.');
    },
    envKeys: ['OPENAI_API_KEY'],
  },
  deepseek: {
    id: 'deepseek',
    label: 'DeepSeek',
    isConfigured: () => Boolean(process.env.DEEPSEEK_API_KEY),
    translate: async () => {
      throw new Error('DeepSeek çeviri modeli henüz yapılandırılmadı.');
    },
    envKeys: ['DEEPSEEK_API_KEY'],
  },
};

const normalizedModel = (value) => (value || '').toString().trim().toLowerCase();

const resolveInitialModel = () => {
  const preferred = normalizedModel(process.env.TRANSLATION_ACTIVE_MODEL || 'glm');
  const preferredProvider = AVAILABLE_PROVIDERS[preferred];
  if (preferredProvider && preferredProvider.isConfigured()) {
    return preferredProvider.id;
  }

  const firstConfigured = Object.values(AVAILABLE_PROVIDERS).find((provider) =>
    provider.isConfigured(),
  );
  return firstConfigured ? firstConfigured.id : 'glm';
};

let activeModel = resolveInitialModel();

export const getActiveTranslationModel = () => activeModel;

export const setActiveTranslationModel = (modelId) => {
  const provider = AVAILABLE_PROVIDERS[normalizedModel(modelId)];
  if (!provider) {
    throw new Error('Geçersiz çeviri modeli.');
  }
  if (!provider.isConfigured()) {
    throw new Error(`${provider.label} için API anahtarı tanımlı değil.`);
  }
  activeModel = provider.id;
  return activeModel;
};

export const listTranslationModels = () =>
  Object.values(AVAILABLE_PROVIDERS).map((provider) => ({
    id: provider.id,
    label: provider.label,
    configured: provider.isConfigured(),
    active: provider.id === activeModel,
    requiredEnv: provider.envKeys,
  }));

export const translateWithActiveModel = async (text) => {
  const provider = AVAILABLE_PROVIDERS[activeModel];
  if (!provider || !provider.isConfigured()) {
    throw new Error('Aktif çeviri modeli yapılandırılmadı.');
  }
  return provider.translate(text);
};
