#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import os
import re
import json

ROOT = os.getcwd()

OUTPUT = os.path.join(ROOT, "audit")

if not os.path.exists(OUTPUT):
    os.makedirs(OUTPUT)

controllers = {}

controller_root = os.path.join(ROOT, "app", "Http", "Controllers")

for root, dirs, files in os.walk(controller_root):

    for file in files:

        if not file.endswith("Controller.php"):
            continue

        path = os.path.join(root, file)

        relative = os.path.relpath(path, ROOT)

        with open(path, "r", encoding="utf-8", errors="ignore") as f:
            content = f.read()

        namespace = ""

        m = re.search(r'namespace\s+([^;]+);', content)

        if m:
            namespace = m.group(1)

        classname = ""

        m = re.search(r'class\s+([A-Za-z0-9_]+)', content)

        if m:
            classname = m.group(1)

        methods = re.findall(
            r'public\s+function\s+([A-Za-z0-9_]+)\s*\(',
            content
        )

        views = re.findall(
            r'return\s+view\s*\(\s*[\'"]([^\'"]+)',
            content
        )

        models = re.findall(
            r'use\s+App\\Models\\([^;]+);',
            content
        )

        middleware = re.findall(
            r'middleware\s*\(\s*[\'"]([^\'"]+)',
            content
        )

        controllers[classname] = {
            "file": relative,
            "namespace": namespace,
            "methods": methods,
            "views": views,
            "models": models,
            "middleware": middleware
        }

report = os.path.join(OUTPUT, "controllers.json")

with open(report, "w") as f:
    json.dump(controllers, f, indent=4)

print("="*60)
print("DOOCTOR DEVKIT - CONTROLLER SCANNER")
print("="*60)
print()

print("Controllers :", len(controllers))

total_methods = sum(len(v["methods"]) for v in controllers.values())

print("Methods     :", total_methods)

print()

print("Report saved:")

print(report)
