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


CONNECTOR = ConnectorDef(
    key="snapchat",
    name="Snapchat",
    category="analytics",
    auth_type="api_key",
    version="01.00.00",
    client_side=True,
    icon="snapchat",
    image_url=None,  # set to your CDN URL
    description="Snap Pixel for frontend event tracking and Snap Conversions API for server-side event deduplication.",
    docs_url="https://marketingapi.snapchat.com/docs/conversion.html",
    config_fields=("pixel_id",),
    secret_fields=("access_token",),
    config_field_defs=(
        ConnectorFieldDef(
            key="pixel_id",
            label="Pixel ID",
            description="Your Snap Pixel ID, shared by the frontend pixel and the server-side Conversions API.",
            required=True,
        ),
    ),
    secret_field_defs=(
        ConnectorFieldDef(
            key="access_token",
            label="Conversions API access token",
            description="A long-lived access token generated for your Snap Pixel in Snapchat Ads Manager.",
            required=True,
            input_type="password",
        ),
    ),
    actions=(
        ConnectorActionDef(
            key="track_event",
            slug="snapchat.track_event",
            name="Track event (Conversions API)",
            description="Send a server-side conversion event via the Snap Conversions API.",
            input_schema={
                "type": "object",
                "properties": {
                    "event_type": {"type": "string"},
                    "event_conversion_type": {"type": "string"},
                    "event_tag": {"type": "string"},
                    "timestamp": {"type": "integer"},
                    "hashed_email": {"type": "string"},
                    "hashed_phone_number": {"type": "string"},
                    "user_agent": {"type": "string"},
                    "ip_address": {"type": "string"},
                    "page_url": {"type": "string"},
                    "price": {"type": "number"},
                    "currency": {"type": "string"},
                    "transaction_id": {"type": "string"},
                    "item_ids": {"type": "array"},
                },
                "required": ["event_type", "event_conversion_type"],
                "additionalProperties": True,
            },
            required_capabilities=("integrations.execute",),
        ),
        ConnectorActionDef(
            key="send_event",
            slug="snapchat.send_event",
            name="Send event",
            description="Compatibility alias for Snap Conversions API event ingestion.",
            input_schema={"type": "object", "additionalProperties": True},
            required_capabilities=("integrations.execute",),
        ),
    ),
    changelog=(
        ConnectorChangelogEntry(
            version="01.00.00",
            date="2026-04-26",
            notes="Initial release. Frontend Snap Pixel injection + server-side Conversions API track_event.",
        ),
    ),
)
