"""S3 protocol action schemas shared by customer S3 and additive R2 operations."""

from src.domain.connectors.catalog._base import ConnectorActionDef


def object_actions(provider: str) -> tuple[ConnectorActionDef, ...]:
    result = []
    verbs = {
        "put_object": "put",
        "get_object": "get",
        "delete_object": "delete",
        "head_object": "exists",
        "list_objects": "list",
    }
    for operation in ("put_object", "get_object", "delete_object", "head_object", "list_objects"):
        properties = {"bucket_name": {"type": "string"}}
        required = []
        if operation == "list_objects":
            properties.update(
                prefix={"type": "string"},
                max_keys={"type": "integer"},
                continuation_token={"type": "string"},
            )
        else:
            properties["key"] = {"type": "string", "maxLength": 1024}
            required = ["key"]
        if operation == "put_object":
            properties.update(
                content_base64={"type": "string", "minLength": 0, "maxLength": 349528},
                content_type={"type": "string", "maxLength": 200},
            )
            required.append("content_base64")
        result.append(
            ConnectorActionDef(
                key=operation,
                slug=f"{provider}.{operation}",
                name=operation.replace("_", " ").title(),
                description="Customer bucket object operation. Put/get are limited to 256 KiB.",
                required_capabilities=("integrations.execute",),
                implements=(f"storage.file.{verbs[operation]}",),
                input_schema={
                    "type": "object",
                    "properties": properties,
                    "required": required,
                    "additionalProperties": False,
                },
            )
        )
    return tuple(result)
