# app/modules/enums.py
"""
Module system enums.

This file contains enums used by the module system that need to be
importable without triggering database model imports.

The FrontendType enum is defined here to break a circular import:
- app.modules.base imports FrontendType
- Previously FrontendType was in models.database.admin_menu_config
- Importing from models.database triggers model discovery
- Model discovery imports module definitions
- Module definitions import from app.modules.base → CIRCULAR

By defining FrontendType here, we break this cycle.
"""

import enum


class FrontendType(str, enum.Enum):
    """Frontend types that can have menu configuration."""

    PLATFORM = "platform"    # Public marketing pages (pricing, signup, about)
    ADMIN = "admin"          # Admin panel (super admins, platform admins)
    STORE = "store"        # Store dashboard
    STOREFRONT = "storefront"  # Customer-facing shop
    MERCHANT = "merchant"    # Merchant billing portal


# Menu items that cannot be hidden - always visible regardless of config
# Organized by frontend type
# NOTE: This will be deprecated in favor of MenuItemDefinition.is_mandatory
MANDATORY_MENU_ITEMS = {
    FrontendType.ADMIN: frozenset({
        "dashboard",  # Default landing page after login
        "merchants",
        "stores",
        "admin-users",
        "settings",
    }),
    FrontendType.STORE: frozenset({
        "dashboard",  # Default landing page after login
        "settings",
    }),
    FrontendType.PLATFORM: frozenset(),
    FrontendType.STOREFRONT: frozenset(),
    FrontendType.MERCHANT: frozenset({
        "dashboard",
        "subscriptions",
    }),
}


__all__ = ["FrontendType", "MANDATORY_MENU_ITEMS"]
