"""Calendar plugin — appointments, tasks, kanban, resources, ICS feed/import, recurrence."""

from __future__ import annotations

from app.plugins.base import BasePlugin
from app.plugins.manifest import PluginManifest, PluginRouteDef, FrontendMenuItem, FrontendPageRoute, FrontendDetailTab


class CalendarPlugin(BasePlugin):
    """Calendar plugin for appointment/task management with recurrence, ICS, and resource booking."""

    manifest = PluginManifest(
        name="calendar",
        version="1.0.0",
        display_name="Calendar",
        description="Calendar with appointments, tasks, kanban board, recurrence, ICS export/import, resource booking, sharing.",
        dependencies=[],
        routes=[
            PluginRouteDef(
                path="/api/v1/calendars",
                module="app.plugins.builtins.calendar.routes",
                router_attr="calendar_router",
            ),
            PluginRouteDef(
                path="/api/v1/resources",
                module="app.plugins.builtins.calendar.routes",
                router_attr="resource_router",
            ),
            PluginRouteDef(
                path="/api/v1",
                module="app.plugins.builtins.calendar.routes",
                router_attr="router",
            ),
        ],
        events=[],
        migrations=["0001_initial.sql", "0002_add_deleted_at.sql"],
        permissions=[
            "calendar:read",
            "calendar:write",
            "calendar:delete",
            "calendar:share",
            "calendar:admin",
        ],
        menu_items=[
            FrontendMenuItem(label_key='nav.calendar', label='Calendar', path='/calendar', icon='Calendar', order=20),
            FrontendMenuItem(label_key='nav.calendarKanban', label='Calendar Kanban', path='/calendar/kanban', icon='KanbanSquare', group='nav.calendar', order=21),
        ],
        page_routes=[
            FrontendPageRoute(path='/calendar', component='@/pages/Calendar', protected=True),
            FrontendPageRoute(path='/calendar/kanban', component='@/pages/CalendarKanban', protected=True),
        ],
        detail_tabs=[
            FrontendDetailTab(entity_type='contact', label_key='tabs.calendar', label='Calendar', component='@/components/contact/ContactCalendarTab', icon='Calendar', order=30, permission='calendar:read'),
        ],
    )
