"""Declara static os metodos listados em fixtures/chamadas-estaticas.txt (Classe::metodo).

So altera a palavra-chave: 'public function x(' -> 'public static function x('. Preserva bytes e quebras de linha.
"""
import re
from pathlib import Path

RAIZ = Path(__file__).resolve().parents[2]
BS = chr(92)

for alvo in (RAIZ / "tools/migracao-php83/fixtures/chamadas-estaticas.txt").read_text().split():
    classe, metodo = alvo.split("::")
    p = RAIZ / (classe.replace("app" + BS, "", 1).replace(BS, "/") + ".php")
    b = p.read_bytes()
    pad = re.compile(rb"(public|protected|private)(\s+)function(\s+)" + metodo.encode() + rb"(\s*\()")
    novo, n = pad.subn(rb"\1\2static function\3" + metodo.encode() + rb"\4", b)
    if n:
        p.write_bytes(novo)
    print(f"{n} {alvo}")
