import { useState, useEffect } from 'react';
import {
  jiraConfigClient,
  SaveJiraConfigRequest,
} from '@/clients/jira-config-client';
import { JiraConfig } from '@/lib/types';

export function useJiraConfig() {
  const [config, setConfig] = useState<JiraConfig | null>(null);
  const [isLoading, setIsLoading] = useState(true);
  const [error, setError] = useState<string | null>(null);

  // Charger la config au montage
  useEffect(() => {
    loadConfig();
  }, []);

  const loadConfig = async () => {
    try {
      setIsLoading(true);
      setError(null);
      const jiraConfig = await jiraConfigClient.getJiraConfig();
      setConfig(jiraConfig);
    } catch (err) {
      console.error('Erreur lors du chargement de la config Jira:', err);
      setError('Erreur lors du chargement de la configuration');
    } finally {
      setIsLoading(false);
    }
  };

  const saveConfig = async (configData: SaveJiraConfigRequest) => {
    try {
      setError(null);
      const response = await jiraConfigClient.saveJiraConfig(configData);

      if (response.success) {
        setConfig(response.jiraConfig);
        return { success: true, message: response.message };
      } else {
        setError('Erreur lors de la sauvegarde');
        return { success: false, message: 'Erreur lors de la sauvegarde' };
      }
    } catch (err) {
      const errorMessage =
        err instanceof Error
          ? err.message
          : 'Erreur lors de la sauvegarde de la configuration';
      setError(errorMessage);
      return { success: false, message: errorMessage };
    }
  };

  const deleteConfig = async () => {
    try {
      setError(null);
      const response = await jiraConfigClient.deleteJiraConfig();

      if (response.success) {
        setConfig({
          baseUrl: '',
          email: '',
          apiToken: '',
          enabled: false,
          projectKey: '',
          ignoredProjects: [],
        });
        return { success: true, message: response.message };
      } else {
        setError('Erreur lors de la suppression');
        return { success: false, message: 'Erreur lors de la suppression' };
      }
    } catch (err) {
      const errorMessage =
        err instanceof Error
          ? err.message
          : 'Erreur lors de la suppression de la configuration';
      setError(errorMessage);
      return { success: false, message: errorMessage };
    }
  };

  return {
    config,
    isLoading,
    error,
    saveConfig,
    deleteConfig,
    refetch: loadConfig,
  };
}
