"""extend api call logs with service/api_name/duration/correlation

Revision ID: a1f2c3d4e5f6
Revises: 0ef2f1634393
Create Date: 2026-07-24 00:00:00.000000

"""
from typing import Sequence, Union

from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision: str = 'a1f2c3d4e5f6'
down_revision: Union[str, Sequence[str], None] = '0ef2f1634393'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
    """Upgrade schema."""
    op.add_column(
        'onboarding_api_call_logs',
        sa.Column('service', sa.String(length=20), nullable=False, server_default='Base CRM'),
    )
    op.add_column('onboarding_api_call_logs', sa.Column('api_name', sa.String(length=100), nullable=True))
    op.add_column('onboarding_api_call_logs', sa.Column('duration_ms', sa.Integer(), nullable=True))
    op.add_column('onboarding_api_call_logs', sa.Column('correlation_id', sa.String(length=100), nullable=True))
    # Widen error_message String(1000) -> Text so a full traceback fits.
    op.alter_column(
        'onboarding_api_call_logs', 'error_message',
        existing_type=sa.String(length=1000), type_=sa.Text(), existing_nullable=True,
    )
    op.create_index(
        'ix_onboarding_api_call_logs_merchant_service',
        'onboarding_api_call_logs', ['merchant_id', 'service'], unique=False,
    )


def downgrade() -> None:
    """Downgrade schema."""
    op.drop_index('ix_onboarding_api_call_logs_merchant_service', table_name='onboarding_api_call_logs')
    # Truncate on the way down: upgrade() widened this column precisely so full
    # tracebacks fit, so a plain Text -> VARCHAR(1000) cast raises
    # StringDataRightTruncation as soon as any log row exceeds 1000 chars.
    op.alter_column(
        'onboarding_api_call_logs', 'error_message',
        existing_type=sa.Text(), type_=sa.String(length=1000), existing_nullable=True,
        postgresql_using='left(error_message, 1000)',
    )
    op.drop_column('onboarding_api_call_logs', 'correlation_id')
    op.drop_column('onboarding_api_call_logs', 'duration_ms')
    op.drop_column('onboarding_api_call_logs', 'api_name')
    op.drop_column('onboarding_api_call_logs', 'service')
