"""Copia app/services do Flask e adapta imports para Django."""
from __future__ import annotations

import re
import shutil
from pathlib import Path

ROOT = Path(__file__).resolve().parent.parent
FLASK_SERVICES = Path(r"c:\Repositorios\sysRevisao\app\services")
DJANGO_SERVICES = ROOT / "rsl" / "services"

SKIP = {"schema_sync.py"}

REPLACEMENTS = [
    (r"from app\.models import (.+)", r"from reviews.models import \1"),
    (r"from app\.models\.(\w+) import (.+)", r"from reviews.models import \2"),
    (r"from app\.services\.(\w+) import (.+)", r"from rsl.services.\1 import \2"),
    (r"from app\.extensions import db\n", ""),
    (r"from flask import (.+)\n", ""),
    (r"db\.session\.add\(([^)]+)\)", r"\1.save()"),
    (r"db\.session\.delete\(([^)]+)\)", r"\1.delete()"),
    (r"db\.session\.commit\(\)", ""),
    (r"db\.session\.flush\(\)", r"\1.save()" if False else ""),  # handled below
    (r"(\w+)\.query\.filter_by\(", r"\1.objects.filter("),
    (r"(\w+)\.query\.filter\(", r"\1.objects.filter("),
    (r"(\w+)\.query\.get_or_404\(", r"get_object_or_404(\1, "),
    (r"(\w+)\.query\.get\(", r"\1.objects.get("),
    (r"(\w+)\.query\.all\(\)", r"\1.objects.all()"),
    (r"(\w+)\.query\.count\(\)", r"\1.objects.count()"),
    (r"(\w+)\.query\.order_by\(", r"\1.objects.order_by("),
    (r"(\w+)\.query\.first\(\)", r"\1.objects.first()"),
]


def transform(content: str) -> str:
    for pattern, repl in REPLACEMENTS:
        content = re.sub(pattern, repl, content)
    content = re.sub(r"db\.session\.flush\(\)", "", content)
    if "get_object_or_404" in content and "from django.shortcuts import" not in content:
        content = "from django.shortcuts import get_object_or_404\n" + content
    return content


def main() -> None:
    if DJANGO_SERVICES.exists():
        shutil.rmtree(DJANGO_SERVICES)
    shutil.copytree(FLASK_SERVICES, DJANGO_SERVICES, ignore=shutil.ignore_patterns(*SKIP))
    for path in DJANGO_SERVICES.glob("*.py"):
        text = path.read_text(encoding="utf-8")
        path.write_text(transform(text), encoding="utf-8")
    (DJANGO_SERVICES / "__init__.py").write_text("", encoding="utf-8")
    print(f"Ported services to {DJANGO_SERVICES}")


if __name__ == "__main__":
    main()
