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


CONNECTOR = ConnectorDef(
    key="instagram",
    name="Instagram",
    category="publishing",
    auth_type="oauth",
    version="01.00.00",
    icon="instagram",
    description="Publish media to an Instagram Professional account through Meta's two-step media-container flow.",
    docs_url="https://www.postman.com/meta/instagram/documentation/6yqw8pt/instagram-api",
    config_fields=("ig_user_id", "graph_version"),
    secret_fields=("access_token",),
    config_field_defs=(
        ConnectorFieldDef(
            key="ig_user_id",
            label="Instagram user ID",
            description="The Instagram Professional account ID authorized for publishing.",
            required=True,
        ),
        ConnectorFieldDef(
            key="graph_version",
            label="Meta Graph API version",
            description="Optional version such as v25.0; update when Meta versions are migrated.",
            default="v25.0",
        ),
    ),
    secret_field_defs=(
        ConnectorFieldDef(
            key="access_token",
            label="Meta access token",
            description="Token with instagram_content_publish for the authorized Professional account.",
            required=True,
            input_type="password",
        ),
    ),
    actions=(
        ConnectorActionDef(
            key="create_media_container",
            slug="instagram.create_media_container",
            name="Create media container",
            description="Create an Instagram media container from a publicly fetchable media URL.",
            input_schema={
                "type": "object",
                "properties": {
                    "ig_user_id": {"type": "string"},
                    "media_url": {"type": "string"},
                    "media_type": {"enum": ["IMAGE", "VIDEO", "REELS"]},
                    "caption": {"type": "string"},
                    "share_to_feed": {"type": "boolean"},
                },
                "required": ["media_url"],
                "additionalProperties": False,
            },
            required_scopes=("instagram_content_publish",),
            required_capabilities=("integrations.execute",),
        ),
        ConnectorActionDef(
            key="publish_media_container",
            slug="instagram.publish_media_container",
            name="Publish media container",
            description="Publish a previously created Instagram media container.",
            input_schema={
                "type": "object",
                "properties": {
                    "ig_user_id": {"type": "string"},
                    "creation_id": {"type": "string"},
                },
                "required": ["creation_id"],
                "additionalProperties": False,
            },
            required_scopes=("instagram_content_publish",),
            required_capabilities=("integrations.execute",),
        ),
    ),
    changelog=(
        ConnectorChangelogEntry(
            version="01.00.00",
            date="2026-09-20",
            notes="Initial two-step Instagram media container and publish adapter.",
        ),
    ),
)
