import { useState } from 'react';
import { useSession } from 'next-auth/react';
import { useRouter } from 'next/navigation';
import Swal from 'sweetalert2';

const API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL || 'http://localhost:8000/api/v1';

export interface UseJsonToTypeApiReturn {
  title: string;
  setTitle: (value: string) => void;
  saveSuccess: string;
  saveError: string;
  isSaving: boolean;
  handleSave: (jsonData: string, typeData: string) => Promise<void>;
  clearMessages: () => void;
}

export const useJsonToTypeApi = (): UseJsonToTypeApiReturn => {
  const { data: session, status } = useSession();
  const router = useRouter();
  
  const [title, setTitle] = useState('');
  const [saveSuccess, setSaveSuccess] = useState('');
  const [saveError, setSaveError] = useState('');
  const [isSaving, setIsSaving] = useState(false);

  const clearMessages = () => {
    setSaveSuccess('');
    setSaveError('');
  };

  const handleSave = async (jsonData: string, typeData: string) => {
    // Login kontrolü
    if (status !== 'authenticated' || !session) {
      Swal.fire({
        icon: 'warning',
        title: 'Giriş Gerekli',
        text: 'Kaydetmek için giriş yapmalısınız!',
        confirmButtonText: 'Giriş Yap',
        showCancelButton: true,
        cancelButtonText: 'İptal',
      }).then((result) => {
        if (result.isConfirmed) {
          router.push('/auth/login');
        }
      });
      return;
    }

    // Validation
    if (!title.trim()) {
      Swal.fire({
        icon: 'error',
        title: 'Başlık Eksik',
        text: 'Lütfen bir başlık girin',
        confirmButtonText: 'Tamam',
      });
      return;
    }

    if (!jsonData.trim()) {
      Swal.fire({
        icon: 'error',
        title: 'JSON Eksik',
        text: 'Lütfen JSON verisi girin',
        confirmButtonText: 'Tamam',
      });
      return;
    }

    if (!typeData.trim()) {
      Swal.fire({
        icon: 'error',
        title: 'Dönüştürme Gerekli',
        text: 'Lütfen önce JSON\'u TypeScript\'e dönüştürün',
        confirmButtonText: 'Tamam',
      });
      return;
    }

    setIsSaving(true);
    setSaveError('');
    setSaveSuccess('');

    try {
      const response = await fetch(`${API_BASE_URL}/utils/jasontotype/`, {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          'Authorization': `Bearer ${session.accessToken}`,
        },
        body: JSON.stringify({
          title: title.trim(),
          json_data: jsonData.trim(),
          type_data: typeData.trim(),
        }),
      });

      const data = await response.json();

      if (!response.ok) {
        // Unique constraint hatası kontrolü
        if (data.json_data || data.type_data) {
          const errors = [];
          if (data.json_data) errors.push('Bu JSON verisi zaten kayıtlı');
          if (data.type_data) errors.push('Bu TypeScript tipi zaten kayıtlı');
          
          Swal.fire({
            icon: 'error',
            title: 'Kayıt Mevcut',
            text: errors.join(' ve '),
            confirmButtonText: 'Tamam',
          });
          return;
        }
        throw new Error(data.detail || data.error || 'Kaydetme başarısız');
      }

      // Başarılı kayıt
      Swal.fire({
        icon: 'success',
        title: 'Başarılı!',
        text: 'Dönüştürme başarıyla kaydedildi',
        timer: 2000,
        showConfirmButton: false,
      });
      
      setSaveSuccess('Başarıyla kaydedildi!');
      setTimeout(() => setSaveSuccess(''), 3000);
    } catch (err) {
      Swal.fire({
        icon: 'error',
        title: 'Hata',
        text: (err as Error).message,
        confirmButtonText: 'Tamam',
      });
      setSaveError((err as Error).message);
    } finally {
      setIsSaving(false);
    }
  };

  return {
    title,
    setTitle,
    saveSuccess,
    saveError,
    isSaving,
    handleSave,
    clearMessages,
  };
};

