
import os
import sys

BASE_DIR = "/home/skeversu/skever-portal-staging"
sys.path.insert(0, BASE_DIR)
os.chdir(BASE_DIR)

os.environ.setdefault(
    "DJANGO_SETTINGS_MODULE",
    "config.config.settings",
)

import django
django.setup()

from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group, Permission
from django.db import connection
from django.db.migrations.executor import MigrationExecutor

print("=== STAGING READ-ONLY DIAGNOSTIC ===")
print("Database vendor:", connection.vendor)
print("Database name:", connection.settings_dict.get("NAME"))

print("\n=== ORDER PERMISSIONS ===")
codenames = [
    "skv_view_orders",
    "skv_place_orders",
    "skv_accept_orders",
    "skv_decline_orders",
    "skv_hold_orders",
]

for codename in codenames:
    permissions = Permission.objects.filter(
        codename=codename,
        content_type__app_label="core",
    )
    print(f"\n{codename}:")
    if not permissions.exists():
        print("  NOT FOUND")
        continue

    for permission in permissions:
        print("  Permission:", permission.name)
        for group in Group.objects.filter(
            permissions=permission
        ).order_by("name"):
            print("  Group:", group.name)

User = get_user_model()
print("\n=== STAFF USERS AND GROUPS ===")
for user in User.objects.filter(
    is_active=True,
    is_staff=True
).order_by("username"):
    print(
        f"\nUser: {user.username} | "
        f"superuser={user.is_superuser}"
    )
    print("  Groups:", list(user.groups.values_list("name", flat=True)))
    print("  Can place orders:", user.has_perm("core.skv_place_orders"))

print("\n=== RECORDED MIGRATIONS ===")
executor = MigrationExecutor(connection)
applied = executor.loader.applied_migrations

for app_label in ["core", "accounts", "auth", "contenttypes"]:
    migrations = sorted(
        name for app, name in applied if app == app_label
    )
    print(f"{app_label}: {migrations}")

print("\n=== UNAPPLIED MIGRATION PLAN ===")
plan = executor.migration_plan(executor.loader.graph.leaf_nodes())
if plan:
    for migration, backwards in plan:
        direction = "BACKWARDS" if backwards else "FORWARDS"
        print(f"{direction}: {migration.app_label}.{migration.name}")
else:
    print("No unapplied migrations detected.")

print("\n=== END: NO CHANGES REQUESTED ===")
