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


CONNECTOR = ConnectorDef(
    key="twilio",
    name="Twilio",
    category="communication",
    auth_type="api_key",
    version="01.00.00",
    icon="twilio",
    image_url=None,  # set to your CDN URL
    description="Send SMS and place test voice calls through Twilio.",
    docs_url="https://www.twilio.com/docs/sms/send-messages",
    config_fields=("account_sid", "from_phone", "messaging_service_sid",),
    secret_fields=("auth_token",),
    config_field_defs=(
        ConnectorFieldDef(
            key="account_sid",
            label="Account SID",
            description="From your Twilio Console dashboard.",
            placeholder="AC...",
            required=True,
        ),
        ConnectorFieldDef(
            key="from_phone",
            label="From number",
            description="A Twilio phone number in E.164 format. Not needed if using a Messaging Service SID.",
            placeholder="+15551234567",
        ),
        ConnectorFieldDef(
            key="messaging_service_sid",
            label="Messaging Service SID",
            description="Optional. Use instead of a single from number for number pooling.",
            placeholder="MG...",
        ),
    ),
    secret_field_defs=(
        ConnectorFieldDef(
            key="auth_token",
            label="Auth token",
            description="From your Twilio Console dashboard.",
            required=True,
            input_type="password",
        ),
    ),
    actions=(
        ConnectorActionDef(
            key="send_sms",
            slug="twilio.send_sms",
            name="Send SMS",
            description="Send an SMS or WhatsApp message via the Twilio Messages API.",
            input_schema={
                "type": "object",
                "properties": {
                    "to": {"type": "string"},
                    "body": {"type": "string"},
                    "media_url": {"type": "array"},
                    "from": {"type": "string"},
                },
                "required": ["to", "body"],
                "additionalProperties": False,
            },
            required_capabilities=("integrations.execute",),
            implements=("messaging.sms.send",),
        ),
        ConnectorActionDef(
            key="make_call",
            slug="twilio.make_call",
            name="Place voice call",
            description="Place a voice call using Twilio's programmable voice API.",
            input_schema={
                "type": "object",
                "properties": {
                    "to": {"type": "string"},
                    "from": {"type": "string"},
                    "twiml": {"type": "string"},
                },
                "required": ["to", "twiml"],
                "additionalProperties": False,
            },
            required_capabilities=("integrations.execute",),
        ),
    ),
)
