import sys
import tempfile
import unittest
from pathlib import Path

PROJECT_ROOT = Path(__file__).resolve().parent.parent

sys.path.insert(0, str(PROJECT_ROOT))

import core.io.structure as manager
from core import constants

PROJECT_ROOT = Path(__file__).resolve().parent.parent

sys.path.insert(0, str(PROJECT_ROOT))


class TestCSSModStructure(unittest.TestCase):
    def setUp(self) -> None:
        self.sandbox = tempfile.TemporaryDirectory()
        self.sandbox_path = Path(self.sandbox.name)

        constants.SERVER_ROOT = self.sandbox_path
        constants.SERVER_CSTRIKE = self.sandbox_path / "cstrike"
        constants.REPOSITORY = self.sandbox_path / "css_mod_manager" / "repository"

        constants.SERVER_CSTRIKE.mkdir(parents=True, exist_ok=True)
        constants.REPOSITORY.mkdir(parents=True, exist_ok=True)

    def tearDown(self) -> None:
        self.sandbox.cleanup()

    def test_ensure_mod_structure_realigns_files(self) -> None:
        """Verify that the isolated extensions are sent to the correct standard subfolders."""
        mod_dir = constants.REPOSITORY / "test_mod"
        mod_dir.mkdir(parents=True, exist_ok=True)

        # Simulation de fichiers jetés en vrac à la racine d'un mod téléchargé
        (mod_dir / "plugin.smx").write_text("binary", encoding="utf-8")
        (mod_dir / "config.cfg").write_text("cvars", encoding="utf-8")
        (mod_dir / "readme.txt").write_text("text", encoding="utf-8")

        # Appel de la fonction de restructuration
        manager.ensure_mod_structure(mod_dir, "test_mod")

        # Vérification des déplacements conformes aux standards Source/SM
        self.assertTrue(
            (mod_dir / "cstrike" / "addons" / "sourcemod" / "plugins" / "plugin.smx").exists()
        )
        self.assertTrue((mod_dir / "cstrike" / "cfg" / "config.cfg").exists())
        self.assertTrue(
            (mod_dir / "cstrike" / "addons" / "sourcemod" / "configs" / "readme.txt").exists()
        )
