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


CONNECTOR = ConnectorDef(
    key="google_docs",
    name="Google Docs",
    category="documents",
    auth_type="oauth",
    version="01.00.00",
    status="preview",
    icon="google_docs",
    image_url=None,  # set to your CDN URL
    description="Customer-bound Google Docs (BYOC). Not P2HS-owned Drive or platform storage.",
    docs_url="https://developers.google.com/workspace/docs/api/reference/rest",
    config_fields=("document_id",),
    secret_fields=("access_token", "refresh_token", "client_id", "client_secret",),
    config_field_defs=(
        ConnectorFieldDef(
            key="document_id",
            label="Default document ID",
            description="Optional default Google document ID when an action omits document_id.",
        ),
    ),
    secret_field_defs=(
        ConnectorFieldDef(
            key="access_token",
            label="Access token",
            required=True,
            input_type="password",
        ),
        ConnectorFieldDef(
            key="refresh_token",
            label="Refresh token",
            required=True,
            input_type="password",
        ),
        ConnectorFieldDef(
            key="client_id",
            label="OAuth client ID",
            required=True,
        ),
        ConnectorFieldDef(
            key="client_secret",
            label="OAuth client secret",
            required=True,
            input_type="password",
        ),
    ),
    actions=(
        ConnectorActionDef(
            key="create_document",
            slug="google_docs.create_document",
            name="Create document",
            description="Create a Google Doc in the connected customer account.",
            input_schema={
                "type": "object",
                "properties": {"title": {"type": "string"}},
                "additionalProperties": False,
            },
            output_schema={
                "type": "object",
                "properties": {"document_id": {"type": "string"}, "title": {"type": "string"}},
            },
            required_scopes=("https://www.googleapis.com/auth/documents",),
            required_capabilities=("integrations.execute",),
            implements=("document.create",),
        ),
        ConnectorActionDef(
            key="get_document",
            slug="google_docs.get_document",
            name="Get document",
            description="Retrieve a Google Doc by provider document ID.",
            input_schema={
                "type": "object",
                "properties": {"document_id": {"type": "string"}},
                "additionalProperties": False,
            },
            required_scopes=("https://www.googleapis.com/auth/documents",),
            required_capabilities=("integrations.execute",),
            implements=("document.get",),
        ),
        ConnectorActionDef(
            key="insert_text",
            slug="google_docs.insert_text",
            name="Insert text",
            description="Insert text at a Docs API index (defaults to 1).",
            input_schema={
                "type": "object",
                "properties": {
                    "document_id": {"type": "string"},
                    "text": {"type": "string"},
                    "index": {"type": "integer"},
                },
                "required": ["text"],
                "additionalProperties": False,
            },
            required_scopes=("https://www.googleapis.com/auth/documents",),
            required_capabilities=("integrations.execute",),
            implements=("document.insert_text",),
        ),
        ConnectorActionDef(
            key="append_text",
            slug="google_docs.append_text",
            name="Append text",
            description="Append text at the end of the document body.",
            input_schema={
                "type": "object",
                "properties": {"document_id": {"type": "string"}, "text": {"type": "string"}},
                "required": ["text"],
                "additionalProperties": False,
            },
            required_scopes=("https://www.googleapis.com/auth/documents",),
            required_capabilities=("integrations.execute",),
            implements=("document.append_text",),
        ),
        ConnectorActionDef(
            key="replace_all_text",
            slug="google_docs.replace_all_text",
            name="Replace all text",
            description="Replace all occurrences of a find string in the document.",
            input_schema={
                "type": "object",
                "properties": {
                    "document_id": {"type": "string"},
                    "find": {"type": "string"},
                    "replace": {"type": "string"},
                    "match_case": {"type": "boolean"},
                },
                "required": ["find"],
                "additionalProperties": False,
            },
            required_scopes=("https://www.googleapis.com/auth/documents",),
            required_capabilities=("integrations.execute",),
            implements=("document.replace_text",),
        ),
    ),
)
