"""Add 2FA support

Revision ID: 7d87040b9f50
Revises: 2b40539e8399
Create Date: 2023-01-19 13:59:00.352822

"""

from collections.abc import Sequence

import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql

# revision identifiers, used by Alembic.
revision: str = "7d87040b9f50"
down_revision: str | None = "2b40539e8399"
branch_labels: str | Sequence[str] | None = None
depends_on: str | Sequence[str] | None = None


def upgrade() -> None:
    # ### commands auto generated by Alembic - please adjust! ###
    op.add_column("users", sa.Column("tfa_enabled", sa.Boolean(), nullable=True, server_default="false"))
    op.add_column("users", sa.Column("totp_key", sa.Text(), nullable=True))
    op.alter_column("users", "tfa_enabled", server_default=None)
    op.add_column("users", sa.Column("recovery_codes", postgresql.ARRAY(sa.Text()), nullable=True, server_default="{}"))
    op.add_column("users", sa.Column("fido2_devices", postgresql.ARRAY(sa.JSON()), nullable=True, server_default="{}"))
    op.alter_column("users", "recovery_codes", server_default=None)
    op.alter_column("users", "fido2_devices", server_default=None)
    # ### end Alembic commands ###


def downgrade() -> None:
    # ### commands auto generated by Alembic - please adjust! ###
    op.drop_column("users", "tfa_enabled")
    op.drop_column("users", "totp_key")
    op.drop_column("users", "recovery_codes")
    op.drop_column("users", "fido2_devices")
    # ### end Alembic commands ###
