"""tsys004 - Update TSYS provider onboarding_schema to include developer_id

Revision ID: tsys004_update_schema
Revises: tsys003_assign_tsys_config
Create Date: 2026-05-06
"""
from typing import Union, Sequence
import json
import sqlalchemy as sa
from alembic import op

revision: str = 'tsys004_update_schema'
down_revision: Union[str, Sequence[str], None] = 'tsys003_assign_tsys_config'
branch_labels = None
depends_on = None

TSYS_SCHEMA_V2 = {
    "fields": [
        {"key": "merchant_id", "label": "TSYS Merchant ID", "type": "text", "required": True, "help_text": "Your TSYS MID"},
        {"key": "device_id", "label": "Device ID", "type": "text", "required": True, "help_text": "24-character TSYS device identifier"},
        {"key": "developer_id", "label": "Developer ID", "type": "text", "required": True, "help_text": "TSYS Developer ID"},
        {"key": "user_id", "label": "User ID", "type": "text", "required": True, "help_text": "TransIT MultiPASS user ID — ephemeral, never stored"},
        {"key": "password", "label": "Password", "type": "password", "required": True, "help_text": "TSYS account password — ephemeral, never stored"},
    ]
}

TSYS_SCHEMA_V1 = {
    "fields": [
        {"key": "merchant_id", "label": "TSYS Merchant ID", "type": "text", "required": True},
        {"key": "device_id", "label": "Device ID", "type": "text", "required": True},
        {"key": "user_id", "label": "User ID", "type": "text", "required": True},
        {"key": "password", "label": "Password", "type": "password", "required": True},
    ]
}


def upgrade() -> None:
    conn = op.get_bind()
    conn.execute(
        sa.text("UPDATE payment_providers SET onboarding_schema = :schema WHERE slug = 'tsys' AND deleted_at IS NULL"),
        {"schema": json.dumps(TSYS_SCHEMA_V2)},
    )


def downgrade() -> None:
    conn = op.get_bind()
    conn.execute(
        sa.text("UPDATE payment_providers SET onboarding_schema = :schema WHERE slug = 'tsys' AND deleted_at IS NULL"),
        {"schema": json.dumps(TSYS_SCHEMA_V1)},
    )
