/**
 * @file popup.js
 * @description Huvudfil för StatusNotifier Extension popup
 * 
 * Author: Linus Olofsson - Iver 
 * Date: 2025-07-03 
 * Last modified: Linus Olofsson (2025-07-08)
 * 
 * @purpose Huvudfil som importerar och initierar alla moduler
 * @invoked_by PopupUI.html
 * @invokes 
 *   - handlers/scanButton.js
 *   - handlers/timerButton.js
 *   - handlers/teamsButton.js
 *   - handlers/updateButton.js
 *   - handlers/clearButton.js
 *   - components/timer.js
 *   - components/itemList.js
 */

console.log('popup.js loaded - script execution started');

// Sätt global variabel för att indikera att popup.js har laddats
window.popupInitialized = false;

// Global error handler för att fånga oväntade fel
window.addEventListener('error', function(event) {
    console.error('Global error caught:', event.error);
    console.error('Error message:', event.message);
    console.error('Error source:', event.filename, 'line:', event.lineno, 'col:', event.colno);
    return false;
});

// Kontrollera att chrome API är tillgänglig
if (typeof chrome === 'undefined' || !chrome.storage) {
    console.error('Chrome API är inte tillgänglig. Detta kan bero på att extension inte körs i rätt kontext.');
}

// Importera alla nödvändiga moduler
import { initTimerButton } from './handlers/timerButton.js';
import { initTeamsButton } from './handlers/teamsButton.js';
import { initNotificationsButton } from './handlers/notificationsButton.js';
import { initUpdateButton } from './handlers/updateButton.js';
import { initClearButton } from './handlers/clearButton.js';
import { initConfigButton, getMinimalMode } from './handlers/configButton.js';
import { initTimer, startTimerFromStorage } from './components/timer.js';
import { displayItems, createPlaceholderItems } from './components/itemList.js';
import { getItems, saveItems } from './common/storage.js';

// Kontrollera om DOM redan är laddad
if (document.readyState === 'loading') {
    // Om DOM inte är laddad än, vänta på DOMContentLoaded-eventet
    document.addEventListener('DOMContentLoaded', initializeExtension);
} else {
    // Om DOM redan är laddad, kör initializeExtension direkt
    initializeExtension();
}

// Funktion för att kontrollera service worker status
async function checkServiceWorkerStatus() {
    try {
        console.log('Checking service worker status...');
        const registration = await navigator.serviceWorker.getRegistration();
        
        if (!registration) {
            console.error('No service worker registration found');
            return false;
        }
        
        console.log('Service worker registration found:', registration);
        console.log('Service worker state:', registration.active ? registration.active.state : 'No active worker');
        console.log('Service worker controls this page:', navigator.serviceWorker.controller ? true : false);
        
        return !!navigator.serviceWorker.controller;
    } catch (error) {
        console.error('Error checking service worker status:', error);
        return false;
    }
}

// Funktion för att visa en notifikation i UI:t om bakgrundsuppdatering
function showUpdateNotification(changedCount) {
    const notification = document.createElement('div');
    notification.className = 'bg-green-100 border-l-4 border-green-500 text-green-700 p-4 mb-4';
    notification.role = 'alert';
    
    const message = changedCount > 0 ? 
        `Bakgrundsuppdatering slutförd! ${changedCount} items har ändrat status.` : 
        'Bakgrundsuppdatering slutförd! Inga statusförändringar hittades.';
    
    notification.innerHTML = `
        <p class="font-bold">Uppdatering</p>
        <p>${message}</p>
    `;
    
    // Lägg till notifikationen högst upp i listan
    const container = document.querySelector('#itemList');
    if (container && container.firstChild) {
        container.insertBefore(notification, container.firstChild);
    } else if (container) {
        container.appendChild(notification);
    }
    
    // Ta bort notifikationen efter 10 sekunder
    setTimeout(() => {
        if (notification.parentNode) {
            notification.parentNode.removeChild(notification);
        }
    }, 10000);
}

// Funktion för att uppdatera itemlistan
async function updateItemList(items) {
    // Uppdatera itemlistan med nya items
    await displayItems(items);
}

// Funktion för att ladda items från storage
async function loadItems() {
    // Ladda items från storage
    const items = await getItems();
    await displayItems(items);
}

// Funktion för att initiera extension
async function initializeExtension() {
    try {
        console.log('Initializing extension...');
        
        // Ta bort badge när popup öppnas (användaren har sett uppdateringarna)
        await chrome.action.setBadgeText({ text: '' });
        
        // Återställ hasUnreadUpdates flaggan
        await chrome.storage.local.set({ hasUnreadUpdates: false });
        
        // Visa inloggad användarinfo i UI:t
        try {
            const userInfo = await chrome.storage.local.get(['sparkUserDisplayName', 'sparkUserTitle', 'scrapedItems']);
            const nameEl = document.getElementById('userDisplayName');
            const titleEl = document.getElementById('userTitle');
            const ticketCountEl = document.getElementById('userTicketCount');
            if (nameEl) {
                nameEl.textContent = userInfo.sparkUserDisplayName 
                    ? `Logged in as: ${userInfo.sparkUserDisplayName}` 
                    : 'Logged in as: ...';
            }
            if (titleEl) {
                titleEl.textContent = userInfo.sparkUserTitle 
                    ? `Title: ${userInfo.sparkUserTitle}` 
                    : 'Title: ...';
            }
            if (ticketCountEl) {
                const count = Array.isArray(userInfo.scrapedItems) ? userInfo.scrapedItems.length : 0;
                ticketCountEl.textContent = `Tickets: ${count}`;
            }
        } catch (userInfoErr) {
            console.warn('Could not load user info for display:', userInfoErr);
        }

        // Applicera minimal-läge om aktiverat
        try {
            const isMinimal = await getMinimalMode();
            if (isMinimal) {
                document.querySelector('.container')?.classList.add('minimal');
            }
        } catch (minErr) {
            console.warn('Could not load minimal mode:', minErr);
        }
        
        // Verifiera service worker status
        const swStatus = await checkServiceWorkerStatus();
        if (!swStatus) {
            console.warn('Service worker not controlling page. Some features may not work correctly.');
        }
        
        // Kontrollera om en bakgrundsuppdatering har skett
        const result = await chrome.storage.local.get([
            'backgroundUpdateOccurred', 
            'lastBackgroundUpdate',
            'updatedItemsInBackground',
            'backgroundUpdateChangedCount'
        ]);
        
        if (result.backgroundUpdateOccurred) {
            console.log('Background update occurred while popup was closed');
            console.log('Last background update:', result.lastBackgroundUpdate);
            
            // Om vi har uppdaterade items från bakgrunden, använd dem direkt
            if (result.updatedItemsInBackground && Array.isArray(result.updatedItemsInBackground)) {
                console.log('Using items from background update');
                await displayItems(result.updatedItemsInBackground);
                
                // Visa en notifikation i UI:t
                const changedCount = result.backgroundUpdateChangedCount || 0;
                showUpdateNotification(changedCount);
            } else {
                // Fallback: Ladda items från storage om vi inte har dem direkt
                console.log('No direct items from background, loading from storage');
                await displayItems();
            }
            
            // Återställ flaggan
            await chrome.storage.local.set({ 
                backgroundUpdateOccurred: false,
                lastBackgroundUpdate: null,
                updatedItemsInBackground: null,
                backgroundUpdateChangedCount: 0
            });
        } else {
            // Ingen bakgrundsuppdatering, ladda items som vanligt
            await displayItems();
        }
        
        // Initiera alla knappar och komponenter
        initTimerButton();
        initTeamsButton();
        initNotificationsButton();
        initUpdateButton();
        initClearButton();
        initConfigButton();
        
        // Initiera timer och starta från sparade inställningar
        initTimer();
        startTimerFromStorage();
        
        console.log('Extension initialized successfully');
        
        // Markera att popup har initialiserats korrekt
        window.popupInitialized = true;
    } catch (error) {
        console.error('Error initializing extension:', error);
    }
}
