"""add onboarding_completed_at and update accounts status default

Revision ID: 0026
Revises: 0025
Create Date: 2026-06-29
"""
from alembic import op
import sqlalchemy as sa

revision = "0026"
down_revision = "0025"
branch_labels = None
depends_on = None


def upgrade() -> None:
    # 1. Add onboarding_completed_at column (nullable TIMESTAMPTZ) — idempotent
    op.execute(
        "ALTER TABLE accounts ADD COLUMN IF NOT EXISTS "
        "onboarding_completed_at TIMESTAMPTZ"
    )

    # 2. Backfill: rename existing 'pending' rows to 'new'
    op.execute("UPDATE accounts SET status = 'new' WHERE status = 'pending'")

    # 3. Change the server_default on status from 'pending' to 'new'
    op.alter_column(
        "accounts",
        "status",
        server_default=sa.text("'new'"),
        existing_type=sa.String(),
        existing_nullable=False,
    )


def downgrade() -> None:
    # 1. Revert server_default on status back to 'pending'
    op.alter_column(
        "accounts",
        "status",
        server_default=sa.text("'pending'"),
        existing_type=sa.String(),
        existing_nullable=False,
    )

    # 2. Revert backfill: rename 'new' and 'onboarding' rows back to 'pending'
    #    'onboarding' did not exist before this migration, so map it back to
    #    the closest pre-existing status ('pending').
    op.execute(
        "UPDATE accounts SET status = 'pending' WHERE status IN ('new', 'onboarding')"
    )

    # 3. Drop the onboarding_completed_at column
    op.drop_column("accounts", "onboarding_completed_at")
