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


CONNECTOR = ConnectorDef(
    key="easypost",
    name="EasyPost",
    category="shipping",
    auth_type="api_key",
    version="01.00.00",
    client_side=False,
    icon="easypost",
    image_url=None,
    description="Carrier rate shopping through EasyPost Shipments. Creating a shipment returns current carrier rates for the supplied addresses and parcel.",
    docs_url="https://docs.easypost.com/docs/shipments",
    config_fields=("api_base_url",),
    secret_fields=("api_key",),
    config_field_defs=(
        ConnectorFieldDef(
            key="api_base_url",
            label="API base URL",
            description="Optional EasyPost API base URL; defaults to https://api.easypost.com/v2.",
        ),
    ),
    secret_field_defs=(
        ConnectorFieldDef(
            key="api_key",
            label="EasyPost API key",
            description="EasyPost test or production API key. Keep it server-side.",
            required=True,
            input_type="password",
        ),
    ),
    actions=(
        ConnectorActionDef(
            key="create_shipment",
            slug="easypost.create_shipment",
            name="Create shipment and retrieve rates",
            description="Create an EasyPost shipment from addresses and parcel dimensions, returning carrier rates.",
            input_schema={
                "type": "object",
                "properties": {
                    "to_address": {"type": "object"},
                    "from_address": {"type": "object"},
                    "parcel": {"type": "object"},
                    "carrier_accounts": {"type": "array", "items": {"type": "string"}},
                    "reference": {"type": "string"},
                },
                "required": ["to_address", "from_address", "parcel"],
                "additionalProperties": False,
            },
            required_capabilities=("integrations.execute",),
        ),
        ConnectorActionDef(
            key="get_shipment_rates",
            slug="easypost.get_shipment_rates",
            name="Get shipment rates",
            description="Retrieve the current rates associated with an existing EasyPost shipment.",
            input_schema={
                "type": "object",
                "properties": {"shipment_id": {"type": "string"}},
                "required": ["shipment_id"],
                "additionalProperties": False,
            },
            required_capabilities=("integrations.execute",),
        ),
    ),
    changelog=(
        ConnectorChangelogEntry(
            version="01.00.00",
            date="2026-09-20",
            notes="Initial rate-shopping actions using EasyPost Shipments.",
        ),
    ),
)
