"""Project import source catalog.

Revision ID: 068
Revises: 067
Create Date: 2026-05-03
"""
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql

revision = "068"
down_revision = "067"
branch_labels = None
depends_on = None


def upgrade() -> None:
    op.create_table(
        "project_import_source_catalog",
        sa.Column("provider", sa.String(length=40), primary_key=True),
        sa.Column("label", sa.String(length=120), nullable=False),
        sa.Column("icon", sa.String(length=120), nullable=True),
        sa.Column("sort_order", sa.Integer(), nullable=False, server_default="100"),
        sa.Column("visible", sa.Boolean(), nullable=False, server_default=sa.true()),
        sa.Column(
            "metadata_json",
            postgresql.JSONB(astext_type=sa.Text()),
            nullable=False,
            server_default=sa.text("'{}'::jsonb"),
        ),
        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()),
    )
    op.bulk_insert(
        sa.table(
            "project_import_source_catalog",
            sa.column("provider", sa.String),
            sa.column("label", sa.String),
            sa.column("icon", sa.String),
            sa.column("sort_order", sa.Integer),
            sa.column("visible", sa.Boolean),
        ),
        [
            {
                "provider": "github",
                "label": "GitHub",
                "icon": "i-lucide-github",
                "sort_order": 10,
                "visible": True,
            },
            {
                "provider": "gitlab",
                "label": "GitLab",
                "icon": "i-lucide-gitlab",
                "sort_order": 20,
                "visible": True,
            },
            {
                "provider": "bitbucket",
                "label": "Bitbucket",
                "icon": "i-lucide-git-branch",
                "sort_order": 30,
                "visible": True,
            },
            {
                "provider": "azure_devops",
                "label": "Azure DevOps",
                "icon": "i-lucide-cloud",
                "sort_order": 40,
                "visible": True,
            },
            {
                "provider": "file_upload",
                "label": "File upload",
                "icon": "i-lucide-upload",
                "sort_order": 50,
                "visible": True,
            },
            {
                "provider": "dropbox",
                "label": "Dropbox",
                "icon": "i-lucide-box",
                "sort_order": 60,
                "visible": True,
            },
        ],
    )


def downgrade() -> None:
    op.drop_table("project_import_source_catalog")

