<?php

namespace NewsletterBridge\Services\Feed;

use NewsletterBridge\Utils\Log;

/**
 * Responsabilità: Gestione file XML
 * Single Responsibility: Solo logica di gestione file
 */
class XMLFileManager {
    
    /**
     * Genera i file XML per tutti i feed
     */
    public function generateFiles(array $feeds, array $feed_configs, int $site_id = null): bool {
        foreach ($feed_configs as $feed) {
            $contents = $feeds[$feed->name] ?? '';
            
            if (!$this->saveFile($feed->file, $contents, $site_id)) {
                return false;
            }
        }
        
        return true;
    }
    
    /**
     * Salva un singolo file XML
     */
    private function saveFile(string $filename, string $contents, int $site_id = null): bool {
        try {
            $xmlPath = $this->getXmlPath($filename, $site_id);
            
            if ($xmlPath === false) {
                Log::error('Impossibile ottenere il percorso per il file: ' . $filename);
                return false;
            }
            
            $result = file_put_contents($xmlPath, $contents);
            
            if ($result === false) {
                Log::error('Impossibile scrivere il file: ' . $xmlPath);
                return false;
            }
            
            return true;
            
        } catch (\Exception $ex) {
            Log::error('Errore nella generazione del file ' . $filename . ': ' . $ex->getMessage());
            return false;
        }
    }
    
    /**
     * Ottiene il percorso sicuro per i file XML
     */
    private function getXmlPath(string $filename, int $site_id = null): string|false {
        // Per Bedrock: usa la root del sito web invece di ABSPATH
        // ABSPATH punta a /wp/ ma i file devono essere accessibili da /web/
        $base_path = dirname(ABSPATH) . '/nl-feed/';
        
        // In multisite, crea una sottodirectory per ogni site_id
        // Controlla multisite in modo più robusto
        $is_multisite = function_exists('is_multisite') ? is_multisite() : false;
        
        // Se siamo in multisite, usa sempre una directory specifica
        if ($is_multisite) {
            if ($site_id !== null) {
                $base_path .= 'site-' . $site_id . '/';
                Log::info('Multisite rilevato - Site ID: ' . $site_id . ' - Percorso: ' . $base_path);
            } else {
                // Se siamo in multisite ma non abbiamo site_id, usa il sito corrente
                $current_site_id = function_exists('get_current_blog_id') ? get_current_blog_id() : 1;
                $base_path .= 'site-' . $current_site_id . '/';
                Log::info('Multisite rilevato - Site ID corrente: ' . $current_site_id . ' - Percorso: ' . $base_path);
            }
        } elseif ($site_id !== null) {
            // Se site_id è fornito ma non siamo in multisite, crea comunque la directory
            $base_path .= 'site-' . $site_id . '/';
            Log::info('Site ID fornito ma non multisite - Site ID: ' . $site_id . ' - Percorso: ' . $base_path);
        } else {
            Log::info('Sito singolo - Percorso: ' . $base_path);
        }
        
        // Crea la directory principale se non esiste
        if (!file_exists($base_path)) {
            Log::info('Creazione directory: ' . $base_path);
            if (!\wp_mkdir_p($base_path)) {
                Log::error('Impossibile creare la directory: ' . $base_path);
                return false;
            }
            Log::info('Directory creata con successo: ' . $base_path);
        } else {
            Log::info('Directory già esistente: ' . $base_path);
        }
        
        return $base_path . $filename;
    }
}
