'use server'

interface OllamaModel {
    name: string
    modified_at: string
    size: number
    digest: string
    details: {
        format: string
        family: string
        families: string[]
        parameter_size: string
        quantization_level: string
    }
}

interface OllamaTagsResponse {
    models: OllamaModel[]
}

export async function getOllamaModels(baseUrl: string): Promise<{ success: boolean; models: string[]; error?: string }> {
    if (!baseUrl) {
        return { success: false, models: [], error: 'Base URL is required' }
    }

    // Ensure URL doesn't end with slash
    const cleanUrl = baseUrl.replace(/\/$/, '')

    try {
        const response = await fetch(`${cleanUrl}/api/tags`, {
            method: 'GET',
            headers: {
                'Content-Type': 'application/json',
            },
            // Set a reasonable timeout
            signal: AbortSignal.timeout(5000)
        })

        if (!response.ok) {
            throw new Error(`Ollama API returned ${response.status}: ${response.statusText}`)
        }

        const data = await response.json() as OllamaTagsResponse

        // Extract model names
        const modelNames = data.models?.map(m => m.name) || []

        return { success: true, models: modelNames }
    } catch (error: any) {
        console.error('Failed to fetch Ollama models:', error)
        return {
            success: false,
            models: [],
            error: error.message || 'Failed to connect to Ollama'
        }
    }
}
