<?php
// panel/includes/proyecto_helper.php
// VERSIÓN CORREGIDA - Sin chown/chgrp (deshabilitadas en aaPanel)

require_once __DIR__ . '/../config/config.php';

/**
 * Copia el proyecto base a un subdominio existente
 * 
 * @param string $cliente Nombre del cliente (ej: cliente1)
 * @return array Resultado de la operación
 */
function copiarProyectoACliente($cliente) {
    // Validar nombre
    if (!preg_match('/^[a-z0-9]+$/i', $cliente)) {
        return [
            'success' => false,
            'message' => 'El nombre solo puede contener letras y números'
        ];
    }
    
    $subdominio = $cliente . '.' . MAIN_DOMAIN;
    $rutaSitio = SITES_ROOT . $subdominio;
    $rutaOrigen = BASE_PROYECTO_PATH;
    $rutaDestinoPanel = $rutaSitio . '/panel';
    
    try {
        // Verificar que el subdominio existe (creado manualmente en aaPanel)
        if (!is_dir($rutaSitio)) {
            return [
                'success' => false,
                'message' => "El subdominio {$subdominio} no existe. Créalo primero en aaPanel."
            ];
        }
        
        // Verificar que el proyecto base existe
        if (!is_dir($rutaOrigen)) {
            return [
                'success' => false,
                'message' => 'El proyecto base no existe en: ' . $rutaOrigen
            ];
        }
        
        // Verificar que no haya un panel ya instalado
        if (is_dir($rutaDestinoPanel)) {
            return [
                'success' => false,
                'message' => 'Ya existe un panel instalado en este subdominio. Elimínalo primero si deseas reinstalar.'
            ];
        }
        
        // Copiar el proyecto base
        copyDirectory($rutaOrigen, $rutaDestinoPanel);
        
        // NOTA: No usamos chown/chgrp porque están deshabilitados en aaPanel
        // Los archivos ya tienen los permisos correctos del usuario que ejecuta PHP (www)
        
        // Solo aseguramos permisos de archivos (chmod, que SÍ está habilitado)
        chmodRecursive($rutaDestinoPanel, 0755, 0644);
        
        return [
            'success' => true,
            'message' => 'Proyecto instalado correctamente',
            'data' => [
                'url' => 'http://' . $subdominio . '/panel',
                'path' => $rutaDestinoPanel,
                'cliente' => $cliente,
                'subdominio' => $subdominio
            ]
        ];
        
    } catch (Exception $e) {
        return [
            'success' => false,
            'message' => 'Error: ' . $e->getMessage()
        ];
    }
}

/**
 * Copia un directorio recursivamente
 */
function copyDirectory($src, $dst) {
    $dir = opendir($src);
    if (!is_dir($dst)) {
        @mkdir($dst, 0755, true);
    }
    
    while (false !== ($file = readdir($dir))) {
        if (($file != '.') && ($file != '..')) {
            if (is_dir($src . '/' . $file)) {
                copyDirectory($src . '/' . $file, $dst . '/' . $file);
            } else {
                copy($src . '/' . $file, $dst . '/' . $file);
            }
        }
    }
    closedir($dir);
}

/**
 * Configura permisos recursivamente (SOLO chmod, sin chown/chgrp)
 */
function chmodRecursive($path, $dirPerm = 0755, $filePerm = 0644) {
    if (!file_exists($path)) return;
    
    if (is_dir($path)) {
        @chmod($path, $dirPerm);
        $files = scandir($path);
        foreach ($files as $file) {
            if ($file != '.' && $file != '..') {
                chmodRecursive($path . '/' . $file, $dirPerm, $filePerm);
            }
        }
    } else {
        @chmod($path, $filePerm);
    }
}

/**
 * Obtiene la lista de subdominios creados (carpetas en /www/wwwroot/)
 */
function listarSubdominios() {
    $sites_root = SITES_ROOT;
    $subdominios = [];
    
    if (is_dir($sites_root)) {
        $dirs = scandir($sites_root);
        foreach ($dirs as $dir) {
            // Excluir carpetas del sistema y el dominio principal
            if ($dir != '.' && $dir != '..' && $dir != 'baseproyecto' && $dir != 'tizentube.sysrgvip.com' && is_dir($sites_root . $dir)) {
                // Verificar si tiene la carpeta /panel
                $tienePanel = is_dir($sites_root . $dir . '/panel');
                $subdominios[] = [
                    'nombre' => $dir,
                    'url' => 'http://' . $dir,
                    'tiene_panel' => $tienePanel,
                    'url_panel' => $tienePanel ? 'http://' . $dir . '/panel' : null
                ];
            }
        }
    }
    
    return $subdominios;
}