"""capabilities-init

Revision ID: 57c38b5f012e
Revises: 44d5bbbf2615
Create Date: 2020-10-07 23:01:25.765027

"""
import sqlalchemy as sa
from alembic import op

# revision identifiers, used by Alembic.
revision = "57c38b5f012e"
down_revision = "44d5bbbf2615"
branch_labels = None
depends_on = None


def upgrade():
    print("creating capabilities")
    op.create_table(
        "capabilities",
        sa.Column("capability_name", sa.String, primary_key=True),
        sa.Column("capability_steps", sa.String),
        sa.Column("max_jobs", sa.Integer),
        sa.Column("enabled", sa.Boolean, default=True, server_default="true"),
    )

    op.create_table(
        "capability_requests",
        sa.Column("capability_request_id", sa.Integer, primary_key=True),
        sa.Column("state", sa.String),
        sa.Column("capability_name", sa.String, sa.ForeignKey("capabilities.capability_name")),
        sa.Column("parameters", sa.String),
    )

    op.create_table(
        "capability_versions",
        sa.Column(
            "capability_request_id",
            sa.Integer,
            sa.ForeignKey("capability_requests.capability_request_id"),
            primary_key=True,
        ),
        sa.Column("version_number", sa.Integer, primary_key=True),
        sa.Column("parameters", sa.String),
    )

    op.create_table(
        "capability_executions",
        sa.Column("execution_id", sa.Integer, primary_key=True),
        sa.Column("state", sa.String),
        sa.Column("capability_request_id", sa.Integer),
        sa.Column("capability_version_number", sa.Integer),
        sa.Column("current_step", sa.Integer),
        sa.Column("steps", sa.String),
        sa.Column(
            "current_workflow_request_id",
            sa.Integer,
            sa.ForeignKey("workflow_requests.workflow_request_id"),
        ),
        sa.ForeignKeyConstraint(
            ("capability_request_id", "capability_version_number"),
            [
                "capability_versions.capability_request_id",
                "capability_versions.version_number",
            ],
        ),
    )

    op.execute(
        "INSERT INTO capabilities (capability_name, capability_steps, max_jobs) "
        "VALUES ('null', 'prepare-and-run-workflow null\nawait-parameter qa-status', 2)"
    )


def downgrade():
    op.drop_table("capability_executions")
    op.drop_table("capability_versions")
    op.drop_table("capability_requests")
    op.drop_table("capabilities")