{
    "profiles": {
        "siteground-prod": {
            "host": "${SSH_HOST}",
            "port": "${SSH_PORT}",
            "user": "${SSH_USER}",
            "key_path": "${SSH_KEY_PATH}",
            "repo_root": "${TARGET_REPO_ROOT}",
            "use_agent": true,
            "commands": {

                "_LECTURA_ESTADO": "──────────────── SOLO LECTURA — BAJO RIESGO ────────────────",

                "server_info": {
                    "description": "Info del servidor: hostname, uptime, SO, usuario activo",
                    "risk": "low",
                    "command": "echo '=== SERVIDOR ===' && hostname && echo '=== UPTIME ===' && uptime && echo '=== SO ===' && uname -a && echo '=== USUARIO ===' && whoami && id"
                },
                "disk_usage": {
                    "description": "Uso de disco en directorios del proyecto",
                    "risk": "low",
                    "command": "df -h && echo '--- repo_root ---' && du -sh {repo_root} 2>/dev/null || echo 'no acceso'"
                },
                "memory_usage": {
                    "description": "Uso de RAM y swap del servidor",
                    "risk": "low",
                    "command": "free -h 2>/dev/null || cat /proc/meminfo | head -20"
                },
                "php_version": {
                    "description": "Versión PHP activa y extensiones cargadas",
                    "risk": "low",
                    "command": "php -v && echo '--- extensiones ---' && php -m | sort"
                },
                "git_status": {
                    "description": "Estado del repositorio git en producción",
                    "risk": "low",
                    "command": "cd {repo_root} && pwd && (git rev-parse --is-inside-work-tree >/dev/null 2>&1 && (git status --short && echo '--- rama ---' && git branch --show-current && echo '--- último commit ---' && git log -1 --oneline) || (echo 'No es un repositorio git'; ls -la | head -40))"
                },
                "git_log": {
                    "description": "Últimos 10 commits en producción",
                    "risk": "low",
                    "command": "cd {repo_root} && git log --oneline -10 2>/dev/null || echo 'No es un repositorio git'"
                },
                "git_diff_head": {
                    "description": "Diff del último commit (qué cambió en el deploy más reciente)",
                    "risk": "low",
                    "command": "cd {repo_root} && git diff HEAD~1 HEAD --stat 2>/dev/null || echo 'No es un repositorio git'"
                },
                "git_diff_file": {
                    "description": "Diff detallado de un fichero específico respecto al commit anterior",
                    "risk": "low",
                    "command": "cd {repo_root} && git diff HEAD~1 HEAD -- {file_path} 2>/dev/null || echo 'No es un repositorio git o fichero no encontrado'"
                },
                "git_show_commit": {
                    "description": "Mostrar diff completo de un commit específico por hash",
                    "risk": "low",
                    "command": "cd {repo_root} && git show --stat {commit_hash} 2>/dev/null || echo 'Commit no encontrado'"
                },
                "git_fetch": {
                    "description": "Fetch de cambios remotos sin aplicarlos (solo lectura del estado remoto)",
                    "risk": "low",
                    "command": "cd {repo_root} && git fetch origin 2>&1 && git log HEAD..origin/$(git branch --show-current) --oneline 2>/dev/null || echo 'No hay commits remotos pendientes o no es un repo git'"
                },
                "tail_php_errorlog": {
                    "description": "Últimas 80 líneas del php_errorlog",
                    "risk": "low",
                    "command": "tail -n 80 {repo_root}/../php_errorlog 2>/dev/null || tail -n 80 {repo_root}/../../php_errorlog 2>/dev/null || echo 'php_errorlog no encontrado'"
                },
                "tail_access_log": {
                    "description": "Últimas 60 líneas del access log del servidor",
                    "risk": "low",
                    "command": "tail -n 60 ~/access-logs/xzonasvalencia.com-ssl_log 2>/dev/null || tail -n 60 ~/logs/access.log 2>/dev/null || echo 'access log no encontrado'"
                },
                "composer_validate": {
                    "description": "Validar composer.json sin instalar nada",
                    "risk": "low",
                    "command": "cd {repo_root} && composer validate 2>&1"
                },
                "composer_lint": {
                    "description": "Ejecutar lint PHP del proyecto",
                    "risk": "low",
                    "command": "cd {repo_root} && composer lint:php 2>&1 | tail -n 40"
                },
                "phpstan": {
                    "description": "Ejecutar análisis PHPStan (estático, no toca código)",
                    "risk": "low",
                    "command": "cd {repo_root} && composer analyse:phpstan 2>&1 | tail -n 60"
                },
                "psalm": {
                    "description": "Ejecutar análisis Psalm (estático, no toca código)",
                    "risk": "low",
                    "command": "cd {repo_root} && composer analyse:psalm 2>&1 | tail -n 60"
                },
                "list_public_files": {
                    "description": "Listar archivos en public_html / raíz del sitio",
                    "risk": "low",
                    "command": "ls -lah {repo_root}/ | head -60"
                },
                "check_permissions": {
                    "description": "Revisar permisos de ficheros críticos (config, uploads, cache)",
                    "risk": "low",
                    "command": "find {repo_root} -name '*.php' -perm /o+w 2>/dev/null | head -20 && echo '--- .env files ---' && find {repo_root} -name '.env' -o -name '*.env' 2>/dev/null | head -10"
                },
                "composer_check_outdated": {
                    "description": "Listar dependencias Composer desactualizadas",
                    "risk": "low",
                    "command": "cd {repo_root} && composer outdated --direct 2>&1 | head -40"
                },
                "cron_list": {
                    "description": "Listar tareas cron del usuario en el servidor",
                    "risk": "low",
                    "command": "crontab -l 2>/dev/null || echo 'Sin crontab configurado'"
                },
                "mysql_ping": {
                    "description": "Verificar conexión MySQL usando credenciales del .env del proyecto",
                    "risk": "low",
                    "command": "cd {repo_root} && php -r \"try { \\$dbUrl = getenv('DATABASE_URL'); if (!\\$dbUrl) { \\$dbUrl = @file_get_contents('{repo_root}/.env'); preg_match('/DATABASE_URL=([^\\n]+)/', \\$dbUrl, \\$m); \\$dbUrl = trim(\\$m[1] ?? ''); } \\$pdo = new PDO(\\$dbUrl); echo 'MySQL OK: connected'; } catch (Exception \\$e) { echo 'MySQL ERROR: '.(\\$e->getMessage()); }\" 2>&1 | head -5"
                },

                "_CAMBIOS_MEDIOS": "──────────────── CAMBIOS — RIESGO MEDIO ────────────────",

                "cache_flush": {
                    "description": "Vaciar OPcache (requiere CLI con permisos)",
                    "risk": "medium",
                    "command": "php -r \"if (function_exists('opcache_reset')) { opcache_reset(); echo 'OPcache vaciado OK'; } else { echo 'opcache_reset no disponible en CLI'; }\""
                },
                "npm_minify": {
                    "description": "Minificar JS/CSS custom del proyecto",
                    "risk": "medium",
                    "command": "cd {repo_root} && npm run minify:custom 2>&1 | tail -n 30"
                },
                "npm_build_grid": {
                    "description": "Compilar build grid-core",
                    "risk": "medium",
                    "command": "cd {repo_root} && npm run build:grid-core 2>&1 | tail -n 30"
                },
                "composer_install_no_dev": {
                    "description": "Instalar/actualizar dependencias Composer sin dev (no modifica lockfile)",
                    "risk": "medium",
                    "command": "cd {repo_root} && composer install --no-dev --no-interaction 2>&1 | tail -n 40"
                },

                "_CAMBIOS_ALTOS": "──────────────── CAMBIOS — RIESGO ALTO ────────────────",

                "git_pull": {
                    "description": "Actualizar producción desde rama main (fast-forward solo)",
                    "risk": "high",
                    "command": "cd {repo_root} && git rev-parse --is-inside-work-tree >/dev/null 2>&1 && git fetch origin && git pull --ff-only origin main 2>&1 || (echo 'No es un repositorio git o el pull falló'; exit 1)"
                },
                "git_pull_current": {
                    "description": "Actualizar producción desde la rama actual (fast-forward)",
                    "risk": "high",
                    "command": "cd {repo_root} && BRANCH=$(git branch --show-current) && git fetch origin && git pull --ff-only origin $BRANCH 2>&1"
                },
                "restart_php_fpm": {
                    "description": "Recargar configuración PHP-FPM (si disponible)",
                    "risk": "high",
                    "command": "pkill -USR2 php-fpm 2>/dev/null && echo 'PHP-FPM recargado' || service php-fpm reload 2>/dev/null || echo 'No se pudo recargar PHP-FPM (puede requerir sudo)'"
                }
            }
        }
    }
}
