from django.db import models
import json

from mainapp.dashboard_acl import iter_dashboard_meta_permissions


class DashboardSectionPerm(models.Model):
    """Anchor model for custom dashboard permission codenames (sidebar / CRUD ACL)."""

    class Meta:
        default_permissions = ()
        permissions = tuple(iter_dashboard_meta_permissions())


class Menu(models.Model):
    name = models.JSONField()
    parent = models.ForeignKey(
        "self",
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
        related_name="children",
    )
    status = models.BooleanField(default=True)
    segment = models.CharField(max_length=255, null=True, blank=True, unique=True)
    type = models.CharField(max_length=255, default="main")
    order = models.IntegerField(default=1)
    created_at = models.DateTimeField(null=True, blank=True)
    updated_at = models.DateTimeField(null=True, blank=True)

    class Meta:
        db_table = "menus"
        ordering = ["order", "id"]

    def parsed_name(self):
        if isinstance(self.name, dict):
            return self.name
        if isinstance(self.name, str):
            try:
                value = json.loads(self.name)
                if isinstance(value, dict):
                    return value
            except json.JSONDecodeError:
                return {}
        return {}

    def __str__(self):
        translations = self.parsed_name()
        if translations:
            return translations.get("en") or translations.get("ar") or f"Menu {self.id}"
        return f"Menu {self.id}"
