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


CONNECTOR = ConnectorDef(
    key="google_ads",
    name="Google Ads",
    category="analytics",
    auth_type="oauth",
    version="01.00.00",
    client_side=True,
    icon="google_ads",
    image_url=None,  # set to your CDN URL
    description="Google Ads gTag for frontend conversion tracking and the Google Ads API for server-side enhanced conversions and offline conversion uploads.",
    docs_url="https://developers.google.com/google-ads/api/docs/conversions/upload-clicks",
    config_fields=("tag_id", "customer_id", "login_customer_id", "client_id",),
    secret_fields=("access_token", "developer_token", "refresh_token", "client_secret",),
    config_field_defs=(
        ConnectorFieldDef(
            key="tag_id",
            label="Conversion ID (gtag)",
            description="Used by the frontend gtag.js snippet for conversion tracking.",
            required=True,
        ),
        ConnectorFieldDef(
            key="customer_id",
            label="Customer ID",
            description="The Google Ads account ID to upload conversions to (10 digits, no dashes).",
            placeholder="1234567890",
            required=True,
        ),
        ConnectorFieldDef(
            key="login_customer_id",
            label="Manager (MCC) customer ID",
            description="Only needed if customer_id is a client account managed under a Manager (MCC) account.",
            placeholder="1234567890",
        ),
        ConnectorFieldDef(
            key="client_id",
            label="OAuth Client ID",
            description="Client ID of the Google Cloud OAuth client used to generate the refresh token. Required, with the client secret, to keep this connection working beyond the initial access token's ~1 hour lifetime.",
            required=True,
        ),
    ),
    secret_field_defs=(
        ConnectorFieldDef(
            key="access_token",
            label="Access token",
            description="Optional. A short-lived access token (expires in ~1 hour). Provide refresh_token, client_id, and client_secret so the connection keeps working after it expires.",
            input_type="password",
        ),
        ConnectorFieldDef(
            key="developer_token",
            label="Developer token",
            description="Developer token approved for your Google Ads Manager account. Required for every API call.",
            required=True,
            input_type="password",
        ),
        ConnectorFieldDef(
            key="refresh_token",
            label="Refresh token",
            description="OAuth refresh token from the same Google Cloud OAuth client as client_id. Required to keep this connection working long-term.",
            required=True,
            input_type="password",
        ),
        ConnectorFieldDef(
            key="client_secret",
            label="OAuth Client secret",
            description="Client secret of the Google Cloud OAuth client used to generate the refresh token.",
            required=True,
            input_type="password",
        ),
    ),
    actions=(
        ConnectorActionDef(
            key="upload_conversion",
            slug="google_ads.upload_conversion",
            name="Upload conversion",
            description="Upload an offline or enhanced conversion event to Google Ads.",
            input_schema={
                "type": "object",
                "properties": {
                    "conversion_action_id": {"type": "string"},
                    "conversion_date_time": {"type": "string"},
                    "conversion_value": {"type": "number"},
                    "currency_code": {"type": "string"},
                    "gclid": {"type": "string"},
                    "order_id": {"type": "string"},
                    "user_identifiers": {"type": "array"},
                },
                "required": ["conversion_action_id", "conversion_date_time"],
                "additionalProperties": True,
            },
            required_capabilities=("integrations.execute",),
        ),
        ConnectorActionDef(
            key="track_conversion",
            slug="google_ads.track_conversion",
            name="Track conversion",
            description="Compatibility alias for Google Ads conversion upload.",
            input_schema={"type": "object", "additionalProperties": True},
            required_capabilities=("integrations.execute",),
        ),
        ConnectorActionDef(
            key="enhanced_conversion",
            slug="google_ads.enhanced_conversion",
            name="Enhanced conversion",
            description="Send an enhanced conversion to Google Ads.",
            input_schema={"type": "object", "additionalProperties": True},
            required_capabilities=("integrations.execute",),
        ),
        ConnectorActionDef(
            key="track_event",
            slug="google_ads.track_event",
            name="Track event",
            description="Compatibility alias for Google Ads conversion tracking.",
            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 injection + server-side enhanced conversion upload.",
        ),
    ),
)
