# app/modules/dev_tools/definition.py
"""
Dev-Tools module definition.

Defines the dev-tools module including its features, menu items,
route configurations, and task definitions.

Dev-Tools is an internal module providing:
- Code quality scanning (architecture, security, performance validators)
- Test execution and results management
- Component library browser
- Icon browser
"""

from app.modules.base import MenuItemDefinition, MenuSectionDefinition, ModuleDefinition
from app.modules.enums import FrontendType

# Dev-Tools module definition
# Note: API routes (code quality, tests) have been moved to monitoring module.
# This module retains models, services, and page routes only.
dev_tools_module = ModuleDefinition(
    code="dev-tools",
    name="Developer Tools",
    description=(
        "Internal development tools including code quality scanning, "
        "test execution, component library, and icon browser."
    ),
    version="1.0.0",
    features=[
        "component_library",  # UI component browser
        "icon_browser",  # Icon library browser
        "code_quality",  # Code quality scanning
        "architecture_validation",  # Architecture validator
        "security_validation",  # Security validator
        "performance_validation",  # Performance validator
        "test_runner",  # Test execution
        "violation_management",  # Violation tracking and assignment
        "sql_query",  # Ad-hoc SQL query tool
        "translation_editor",  # UI translation editor
    ],
    menu_items={
        FrontendType.ADMIN: [
            "components",  # Component library page
            "icons",  # Icon browser page
            "code-quality",  # Code quality dashboard
            "tests",  # Test runner dashboard
            "sql-query",  # SQL query tool
            "translation-editor",  # Translation editor
        ],
        FrontendType.STORE: [],  # No store menu items - internal module
    },
    # New module-driven menu definitions
    menus={
        FrontendType.ADMIN: [
            MenuSectionDefinition(
                id="devTools",
                label_key="dev_tools.menu.developer_tools",
                icon="view-grid",
                order=85,
                is_super_admin_only=True,
                items=[
                    MenuItemDefinition(
                        id="components",
                        label_key="dev_tools.menu.components",
                        icon="view-grid",
                        route="/admin/components",
                        order=10,
                    ),
                    MenuItemDefinition(
                        id="icons",
                        label_key="dev_tools.menu.icons",
                        icon="photograph",
                        route="/admin/icons",
                        order=20,
                    ),
                    MenuItemDefinition(
                        id="sql-query",
                        label_key="dev_tools.menu.sql_query",
                        icon="database",
                        route="/admin/sql-query",
                        order=30,
                    ),
                    MenuItemDefinition(
                        id="platform-debug",
                        label_key="dev_tools.menu.diagnostics",
                        icon="search",
                        route="/admin/platform-debug",
                        order=40,
                    ),
                    MenuItemDefinition(
                        id="translation-editor",
                        label_key="dev_tools.menu.translation_editor",
                        icon="globe",
                        route="/admin/translation-editor",
                        order=50,
                    ),
                ],
            ),
        ],
    },
    is_core=False,
    is_internal=True,  # Internal module - admin-only, not customer-facing
    # =========================================================================
    # Self-Contained Module Configuration
    # =========================================================================
    is_self_contained=True,
    services_path="app.modules.dev_tools.services",
    models_path="app.modules.dev_tools.models",
    schemas_path="app.modules.dev_tools.schemas",
    exceptions_path="app.modules.dev_tools.exceptions",
    tasks_path="app.modules.dev_tools.tasks",
    migrations_path="migrations",
    # Note: Code quality and test tasks are on-demand, not scheduled.
    # If scheduled scans are desired, add ScheduledTask entries here.
)


def get_dev_tools_module_with_routers() -> ModuleDefinition:
    """
    Get dev-tools module definition.

    Note: Admin API routes are auto-discovered from routes/api/admin.py.
    """
    dev_tools_module.router = None
    return dev_tools_module


__all__ = ["dev_tools_module", "get_dev_tools_module_with_routers"]
