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


CONNECTOR = ConnectorDef(
    key="google_analytics",
    name="Google Analytics 4",
    category="analytics",
    auth_type="api_key",
    version="01.00.00",
    client_side=True,
    icon="google_analytics",
    image_url=None,  # set to your CDN URL
    description="GA4 page-view tracking via frontend gtag.js and server-side event ingestion via the Measurement Protocol.",
    docs_url="https://developers.google.com/analytics/devguides/collection/protocol/ga4",
    config_fields=("measurement_id",),
    secret_fields=("api_secret",),
    config_field_defs=(
        ConnectorFieldDef(
            key="measurement_id",
            label="Measurement ID",
            description="Your GA4 data stream Measurement ID.",
            placeholder="G-XXXXXXXXXX",
            required=True,
        ),
    ),
    secret_field_defs=(
        ConnectorFieldDef(
            key="api_secret",
            label="Measurement Protocol API secret",
            description="Created under Admin -> Data Streams -> your stream -> Measurement Protocol API secrets.",
            required=True,
            input_type="password",
        ),
    ),
    actions=(
        ConnectorActionDef(
            key="track_event",
            slug="google_analytics.track_event",
            name="Track event",
            description="Send a server-side GA4 event via the Measurement Protocol.",
            input_schema={
                "type": "object",
                "properties": {
                    "client_id": {"type": "string"},
                    "app_instance_id": {"type": "string"},
                    "user_id": {"type": "string"},
                    "events": {"type": "array"},
                    "timestamp_micros": {"type": "integer"},
                    "non_personalized_ads": {"type": "boolean"},
                },
                "required": ["events"],
                "additionalProperties": False,
            },
            required_capabilities=("integrations.execute",),
        ),
        ConnectorActionDef(
            key="send_event",
            slug="google_analytics.send_event",
            name="Send event",
            description="Compatibility alias for GA4 Measurement Protocol 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 gtag.js injection + server-side Measurement Protocol track_event.",
        ),
    ),
)
