"""Post-generation hook for the backend cookiecutter template.

Removes files that are conditional on the ``use_auth`` and ``use_db`` flags
so the rendered tree only contains the parts the user asked for.

- ``use_auth == "no"`` -> drop ``routes/auth.py``, ``services/auth_service.py``,
  ``models/user.py`` (hashed_password), and strip the auth dependency wiring.
- ``use_db == "no"``   -> drop ``db/``, ``migrations/``, ``connection.py``.
  The DB dep (``tortoise-orm``/``asyncpg``) is conditionally rendered in
  ``pyproject.toml`` (jinja if-block on use_db), so no marker needs
  to be written: the project-status oracle auto-detects db-projects from
  deps (issue #274).
"""

from __future__ import annotations

import shutil
from pathlib import Path

PROJECT_DIR = Path.cwd()


def _remove(path: str) -> None:
    """Remove a file or directory relative to the generated project root."""
    p = PROJECT_DIR / path
    if p.is_dir():
        shutil.rmtree(p, ignore_errors=True)
    elif p.exists():
        p.unlink()


def main() -> None:
    use_auth = "{{ cookiecutter.use_auth }}"
    use_db = "{{ cookiecutter.use_db }}"
    pkg = "{{ cookiecutter.project_name }}"

    if use_auth == "no":
        _remove(f"src/{pkg}/api/v1/routes/auth.py")
        _remove(f"src/{pkg}/services/auth_service.py")
        _remove("tests/test_auth.py")

    if use_db == "no":
        # db is the root cause for the broken-conditional findings: files
        # with unconditional ``from ...db.models.user import User`` must be
        # stripped together with db/, otherwise the generated project
        # fails to import (ImportError/NameError on startup).
        _remove(f"src/{pkg}/db")
        _remove("migrations")
        _remove(f"src/{pkg}/services/user_service.py")
        _remove(f"src/{pkg}/api/v1/routes/users.py")
        _remove(f"src/{pkg}/api/v1/dependencies.py")
        _remove(f"src/{pkg}/schemas/user.py")
        _remove("tests/unit/test_user.py")
        _remove("tests/unit/test_user_service.py")
        _remove("tests/api/test_users.py")
        if use_auth == "yes":
            # auth_service imports User; strip it and its wiring too.
            _remove(f"src/{pkg}/api/v1/routes/auth.py")
            _remove(f"src/{pkg}/services/auth_service.py")
            _remove("tests/test_auth.py")


if __name__ == "__main__":
    main()
