#!/usr/bin/env python3
"""
Script de prueba para verificar las funcionalidades de backup manual
y configuración de proyectos implementadas
"""

import sys
import os
from pathlib import Path

# Agregar el directorio src al path
current_dir = Path(__file__).parent
src_dir = current_dir / "src"
sys.path.insert(0, str(src_dir))

# Imports de módulos propios
from models.config_model import Config
from models.project_model import ProjectManager
from services.basic_backup_service import BasicBackupService


def test_backup_manual():
    """Probar funcionalidad de backup manual"""
    print("=== TEST BACKUP MANUAL ===")

    try:
        # Inicializar servicios
        config = Config()
        project_manager = ProjectManager()
        backup_service = BasicBackupService(config)

        # Obtener proyectos
        projects = project_manager.get_all_projects()
        print(f"Proyectos encontrados: {len(projects)}")

        if not projects:
            print("No hay proyectos para probar")
            return

        # Probar backup del primer proyecto
        project = projects[0]
        print(f"Probando backup del proyecto: {project.name}")
        print(f"Ruta del proyecto: {project.path}")

        # Ejecutar backup
        result = backup_service.backup_project(project)

        if result["success"]:
            print("✅ BACKUP EXITOSO!")
            print(f"Archivo creado: {result['backup_file']}")
            print(f"Tamaño: {result['file_size_mb']:.2f} MB")
        else:
            print("❌ BACKUP FALLÓ!")
            print(f"Error: {result['error']}")

    except Exception as e:
        print(f"❌ ERROR EN TEST: {e}")
        import traceback

        traceback.print_exc()


def test_config_update():
    """Probar funcionalidad de actualización de configuración"""
    print("\n=== TEST ACTUALIZACIÓN DE CONFIGURACIÓN ===")

    try:
        # Inicializar ProjectManager
        project_manager = ProjectManager()

        # Obtener proyectos
        projects = project_manager.get_all_projects()

        if not projects:
            print("No hay proyectos para probar")
            return

        project = projects[0]
        print(f"Probando configuración del proyecto: {project.name}")
        print(
            f"Estado inicial - Habilitado: {project.enabled}, Schedule: {project.schedule}"
        )

        # Preparar nueva configuración
        new_config = {
            "schedule_config": {
                "schedule": "hourly",
                "schedule_time": "10:30",
                "enabled": False,
            }
        }

        # Actualizar configuración
        success = project_manager.update_project_config(project.id, new_config)

        if success:
            print("✅ CONFIGURACIÓN ACTUALIZADA!")

            # Verificar cambios
            updated_project = project_manager.get_project(project.id)
            print(
                f"Estado actualizado - Habilitado: {updated_project.enabled}, Schedule: {updated_project.schedule}"
            )

            # Restaurar configuración original
            restore_config = {
                "schedule_config": {
                    "schedule": "daily",
                    "schedule_time": "02:00",
                    "enabled": True,
                }
            }
            project_manager.update_project_config(project.id, restore_config)
            print("✅ Configuración restaurada")

        else:
            print("❌ FALLO AL ACTUALIZAR CONFIGURACIÓN!")

    except Exception as e:
        print(f"❌ ERROR EN TEST: {e}")
        import traceback

        traceback.print_exc()


def main():
    """Función principal"""
    print("AutoBackups - Test de Funcionalidades")
    print("=" * 50)

    # Test 1: Backup manual
    test_backup_manual()

    # Test 2: Actualización de configuración
    test_config_update()

    print("\n" + "=" * 50)
    print("Tests completados")


if __name__ == "__main__":
    main()
