"""Tests for core.io.filedelete."""

import sys
import tempfile
import unittest
from pathlib import Path

PROJECT_ROOT = Path(__file__).resolve().parent.parent
if str(PROJECT_ROOT) not in sys.path:
    sys.path.insert(0, str(PROJECT_ROOT))

from core.io.filedelete import delete


class TestFileDelete(unittest.TestCase):
    def setUp(self) -> None:
        self.sandbox = tempfile.TemporaryDirectory()
        self.sandbox_path = Path(self.sandbox.name)

    def tearDown(self) -> None:
        self.sandbox.cleanup()

    def test_delete_removes_a_file(self) -> None:
        target = self.sandbox_path / "file.txt"
        target.write_text("content", encoding="utf-8")

        delete(target)

        self.assertFalse(target.exists())

    def test_delete_removes_a_directory_recursively(self) -> None:
        target_dir = self.sandbox_path / "mod_folder"
        (target_dir / "nested").mkdir(parents=True)
        (target_dir / "nested" / "file.smx").write_text("binary", encoding="utf-8")

        delete(target_dir)

        self.assertFalse(target_dir.exists())

    def test_delete_raises_on_missing_path(self) -> None:
        ghost = self.sandbox_path / "does_not_exist.bsp"
        with self.assertRaises(FileNotFoundError):
            delete(ghost)

    def test_delete_accepts_string_path(self) -> None:
        target = self.sandbox_path / "as_string.txt"
        target.write_text("content", encoding="utf-8")

        delete(str(target))

        self.assertFalse(target.exists())


if __name__ == "__main__":
    unittest.main()
