"""function_library — add manifest tracking, source ownership, and version hashes.

Adds managed_source, managed_mode, seed_path, admin_override, manifest_hash,
latest_seed_hash, last_synced_from_seed_at to function_library.
Adds manifest_hash, code_hash, config_hash to function_library_versions.

Revision ID: 051
Revises: 050
"""
from alembic import op
import sqlalchemy as sa

revision = "051"
down_revision = "050"
branch_labels = None
depends_on = None


def upgrade() -> None:
    # ── function_library: source ownership + drift tracking ──────────────────

    op.add_column("function_library", sa.Column(
        "managed_source", sa.Text(), nullable=False, server_default="admin"
    ))
    op.add_column("function_library", sa.Column(
        "managed_mode", sa.Text(), nullable=False, server_default="editable"
    ))
    op.add_column("function_library", sa.Column("seed_path", sa.Text(), nullable=True))
    op.add_column("function_library", sa.Column(
        "admin_override", sa.Boolean(), nullable=False, server_default="false"
    ))
    op.add_column("function_library", sa.Column("manifest_hash", sa.Text(), nullable=True))
    op.add_column("function_library", sa.Column("latest_seed_hash", sa.Text(), nullable=True))
    op.add_column("function_library", sa.Column(
        "last_synced_from_seed_at", sa.DateTime(timezone=True), nullable=True
    ))

    op.create_index("ix_function_library_managed_source", "function_library", ["managed_source"])

    # ── function_library_versions: content hashes ────────────────────────────

    op.add_column("function_library_versions", sa.Column("manifest_hash", sa.Text(), nullable=True))
    op.add_column("function_library_versions", sa.Column("code_hash", sa.Text(), nullable=True))
    op.add_column("function_library_versions", sa.Column("config_hash", sa.Text(), nullable=True))


def downgrade() -> None:
    op.drop_column("function_library_versions", "config_hash")
    op.drop_column("function_library_versions", "code_hash")
    op.drop_column("function_library_versions", "manifest_hash")

    op.drop_index("ix_function_library_managed_source", table_name="function_library")
    op.drop_column("function_library", "last_synced_from_seed_at")
    op.drop_column("function_library", "latest_seed_hash")
    op.drop_column("function_library", "manifest_hash")
    op.drop_column("function_library", "admin_override")
    op.drop_column("function_library", "seed_path")
    op.drop_column("function_library", "managed_mode")
    op.drop_column("function_library", "managed_source")
