from src.domain.connectors.catalog._base import (
    ConnectorActionDef,
    ConnectorDef,
    ConnectorFieldDef,
    ConnectorTriggerDef,
)


CONNECTOR = ConnectorDef(
    key="calendly",
    name="Calendly",
    category="scheduling",
    auth_type="api_key",
    version="01.00.00",
    icon="calendly",
    image_url=None,  # set to your CDN URL
    description="Calendly event types, scheduling links, booked events, and cancellations.",
    docs_url="https://developer.calendly.com/api-docs",
    secret_fields=("access_token",),
    secret_field_defs=(
        ConnectorFieldDef(
            key="access_token",
            label="Personal access token",
            description="Calendly personal access token or OAuth access token.",
            required=True,
            input_type="password",
        ),
    ),
    actions=(
        ConnectorActionDef(
            key="list_event_types",
            slug="calendly.list_event_types",
            name="List event types",
            description="List Calendly event types for the connected user or organization.",
            input_schema={
                "type": "object",
                "properties": {
                    "organization": {"type": "string"},
                    "user": {"type": "string"},
                    "count": {"type": "number"},
                },
                "additionalProperties": False,
            },
            required_capabilities=("integrations.execute",),
        ),
        ConnectorActionDef(
            key="create_scheduling_link",
            slug="calendly.create_scheduling_link",
            name="Create scheduling link",
            description="Create a single-use Calendly scheduling link for an event type.",
            input_schema={
                "type": "object",
                "properties": {
                    "event_type": {"type": "string"},
                    "max_event_count": {"type": "number"},
                },
                "required": ["event_type"],
                "additionalProperties": False,
            },
            required_capabilities=("integrations.execute",),
        ),
        ConnectorActionDef(
            key="get_event",
            slug="calendly.get_event",
            name="Get scheduled event",
            description="Retrieve a booked Calendly event.",
            input_schema={
                "type": "object",
                "properties": {"event_uuid": {"type": "string"}},
                "required": ["event_uuid"],
                "additionalProperties": False,
            },
            required_capabilities=("integrations.execute",),
        ),
        ConnectorActionDef(
            key="cancel_event",
            slug="calendly.cancel_event",
            name="Cancel scheduled event",
            description="Cancel a booked Calendly event.",
            input_schema={
                "type": "object",
                "properties": {"event_uuid": {"type": "string"}, "reason": {"type": "string"}},
                "required": ["event_uuid"],
                "additionalProperties": False,
            },
            required_capabilities=("integrations.execute",),
        ),
        ConnectorActionDef(
            key="list_busy_times",
            slug="calendly.list_busy_times",
            name="List busy times",
            description="List user busy intervals for availability calculations.",
            input_schema={
                "type": "object",
                "properties": {
                    "user": {"type": "string"},
                    "start_time": {"type": "string"},
                    "end_time": {"type": "string"},
                },
                "required": ["start_time", "end_time"],
                "additionalProperties": False,
            },
            required_capabilities=("integrations.execute",),
        ),
    ),
    triggers=(
        ConnectorTriggerDef(
            key="invitee_created",
            event_type="calendly.invitee.created",
            name="Invitee created",
        ),
        ConnectorTriggerDef(
            key="invitee_canceled",
            event_type="calendly.invitee.canceled",
            name="Invitee canceled",
        ),
    ),
)
