"""Track one-time project capability policy reconciliation.

Revision ID: 172
Revises: 171
"""
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects.postgresql import JSONB, UUID

revision = "172"
down_revision = "171"
branch_labels = None
depends_on = None


def upgrade() -> None:
    op.create_table(
        "project_capability_reconciliations",
        sa.Column("project_id", UUID(as_uuid=True), nullable=False),
        sa.Column("desired_fingerprint", sa.String(64), nullable=False),
        sa.Column("desired_snapshot", JSONB, nullable=False, server_default=sa.text("'{}'::jsonb")),
        sa.Column("status", sa.String(40), nullable=False, server_default="pending"),
        sa.Column("required_action", sa.String(80), nullable=True),
        sa.Column("attempt_count", sa.Integer, nullable=False, server_default="0"),
        sa.Column("last_error", sa.Text, nullable=True),
        sa.Column("applied_at", sa.DateTime(timezone=True), nullable=True),
        sa.Column("created_at", sa.DateTime(timezone=True), server_default=sa.func.now()),
        sa.Column("updated_at", sa.DateTime(timezone=True), server_default=sa.func.now()),
        sa.ForeignKeyConstraint(["project_id"], ["projects.id"], ondelete="CASCADE"),
        sa.PrimaryKeyConstraint("project_id"),
    )
    op.create_index(
        "idx_project_capability_reconciliations_status",
        "project_capability_reconciliations",
        ["status"],
    )


def downgrade() -> None:
    op.drop_index(
        "idx_project_capability_reconciliations_status",
        table_name="project_capability_reconciliations",
    )
    op.drop_table("project_capability_reconciliations")
