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


CONNECTOR = ConnectorDef(
    key="facebook",
    name="Facebook / Meta",
    category="analytics",
    auth_type="api_key",
    version="01.00.00",
    client_side=True,
    icon="facebook",
    image_url=None,  # set to your CDN URL
    description="Meta Pixel for frontend event tracking and Conversions API (CAPI) for server-side event deduplication and enhanced match quality.",
    docs_url="https://developers.facebook.com/docs/marketing-api/conversions-api",
    config_fields=("pixel_id", "test_event_code", "page_id", "graph_version",),
    secret_fields=("access_token", "page_access_token",),
    config_field_defs=(
        ConnectorFieldDef(
            key="pixel_id",
            label="Pixel ID",
            description="Your Meta Pixel ID, shared by the frontend pixel and the server-side Conversions API.",
            required=True,
        ),
        ConnectorFieldDef(
            key="test_event_code",
            label="Test event code",
            description="Optional. Meta Test Events code for verifying events in Events Manager before going live.",
        ),
        ConnectorFieldDef(
            key="page_id",
            label="Facebook Page ID",
            description="The Facebook Page ID used by the Page publishing actions.",
        ),
        ConnectorFieldDef(
            key="graph_version",
            label="Graph API version",
            description="Optional Meta Graph API version, for example v26.0.",
        ),
    ),
    secret_field_defs=(
        ConnectorFieldDef(
            key="access_token",
            label="Conversions API access token",
            description="A long-lived Meta access token (a System User token is recommended so it doesn't expire).",
            required=True,
            input_type="password",
        ),
        ConnectorFieldDef(
            key="page_access_token",
            label="Page access token",
            description="A Page access token with permission to publish to the configured Page.",
            input_type="password",
        ),
    ),
    actions=(
        ConnectorActionDef(
            key="track_event",
            slug="facebook.track_event",
            name="Track event (CAPI)",
            description="Send a server-side conversion event via the Meta Conversions API. Use event_id to deduplicate against the frontend pixel.",
            input_schema={
                "type": "object",
                "properties": {
                    "event_name": {"type": "string"},
                    "event_time": {"type": "integer"},
                    "event_id": {"type": "string"},
                    "event_source_url": {"type": "string"},
                    "action_source": {"type": "string"},
                    "user_data": {"type": "object"},
                    "custom_data": {"type": "object"},
                    "opt_out": {"type": "boolean"},
                    "data_processing_options": {"type": "array"},
                },
                "required": ["event_name"],
                "additionalProperties": False,
            },
            required_capabilities=("integrations.execute",),
        ),
        ConnectorActionDef(
            key="create_page_post",
            slug="facebook.create_page_post",
            name="Create Page post",
            description="Publish a text or link post to a Facebook Page.",
            input_schema={
                "type": "object",
                "properties": {
                    "page_id": {"type": "string"},
                    "message": {"type": "string"},
                    "link": {"type": "string"},
                },
                "required": ["message"],
                "additionalProperties": False,
            },
            required_capabilities=("integrations.execute",),
        ),
        ConnectorActionDef(
            key="send_event",
            slug="facebook.send_event",
            name="Send event",
            description="Compatibility alias for the Meta Conversions API event action.",
            input_schema={"type": "object", "additionalProperties": True},
            required_capabilities=("integrations.execute",),
        ),
    ),
    changelog=(
        ConnectorChangelogEntry(
            version="01.00.00",
            date="2026-04-26",
            notes="Initial release. Frontend Meta Pixel injection + server-side CAPI track_event.",
        ),
    ),
)
