// Access the global Supabase library from CDN
const { createClient } = window.supabase;

const STORAGE_KEY_URL = 'karangasem_supabase_url';
const STORAGE_KEY_KEY = 'karangasem_supabase_key';

// Default credentials provided by user
const DEFAULT_URL = 'https://xhlmcuklednurchxmwjw.supabase.co';
const DEFAULT_KEY = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InhobG1jdWtsZWRudXJjaHhtd2p3Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3NjMyNzYyMjAsImV4cCI6MjA3ODg1MjIyMH0.6hBlA91zNoM9smlw4Ez9MLlp_pe544naosc5ffQoGIs';

const getSupabaseConfig = () => {
    const storedUrl = localStorage.getItem(STORAGE_KEY_URL);
    const storedKey = localStorage.getItem(STORAGE_KEY_KEY);
    
    return {
        url: storedUrl || DEFAULT_URL,
        key: storedKey || DEFAULT_KEY
    };
};

const saveSupabaseConfig = (url, key) => {
    localStorage.setItem(STORAGE_KEY_URL, url);
    localStorage.setItem(STORAGE_KEY_KEY, key);
};

const clearSupabaseConfig = () => {
    localStorage.removeItem(STORAGE_KEY_URL);
    localStorage.removeItem(STORAGE_KEY_KEY);
};

// Robust error formatting helper
const formatError = (error) => {
    if (!error) return 'Terjadi kesalahan yang tidak diketahui';
    if (typeof error === 'string') return error;
    if (error.message) return error.message;
    // Handle Supabase error object or other objects
    return JSON.stringify(error);
};

// Initialize client variable (renamed to avoid conflict with global 'supabase')
let dbClient = null;
const config = getSupabaseConfig();

try {
    if (config.url && config.key) {
        dbClient = createClient(config.url, config.key);
    }
} catch (e) {
    console.error("Failed to initialize Supabase:", e);
}

const getClient = () => {
    if (!dbClient) {
        // Try to re-init if config is available
        const cfg = getSupabaseConfig();
        if (cfg.url && cfg.key) {
            try {
                dbClient = createClient(cfg.url, cfg.key);
            } catch (e) {
                console.error("Re-init failed:", e);
            }
        }
    }
    return dbClient;
};

const initClient = (url, key) => {
    try {
        dbClient = createClient(url, key);
        saveSupabaseConfig(url, key);
        return dbClient;
    } catch (e) {
        throw new Error("Gagal menginisialisasi Supabase: " + formatError(e));
    }
};

const checkConnection = async () => {
    const client = getClient();
    if (!client) return { success: false, message: "Klien belum diinisialisasi" };
    
    try {
        // Cek koneksi dengan query ringan
        const { error } = await client.from('employees').select('count', { count: 'exact', head: true });
        
        if (error) {
            // Error 42P01 berarti tabel tidak ditemukan, tapi koneksi ke Supabase berhasil
            if (error.code === '42P01') {
                return { 
                    success: true, 
                    warning: 'Tabel "employees" belum dibuat. Silakan buat tabel di Supabase Dashboard.' 
                };
            }
            // PGRST116: no rows returned (aman untuk head:true)
            if (error.code === 'PGRST116') return { success: true };
            
            throw error;
        }
        
        return { success: true };
    } catch (error) {
        return { success: false, message: formatError(error) };
    }
};

window.SupabaseUtils = {
    getClient,
    initClient,
    getSupabaseConfig,
    clearSupabaseConfig,
    checkConnection,
    formatError
};