"""empty message

Revision ID: 0021_add_delivered_failed_counts
Revises: 0020_template_history_fix
Create Date: 2016-05-23 15:05:25.109346

"""

# revision identifiers, used by Alembic.
revision = "0021_add_delivered_failed_counts"
down_revision = "0020_template_history_fix"

import sqlalchemy as sa
from alembic import op


def upgrade():
    ### commands auto generated by Alembic - please adjust! ###
    op.add_column("jobs", sa.Column("notifications_delivered", sa.Integer(), nullable=True))
    op.add_column("jobs", sa.Column("notifications_failed", sa.Integer(), nullable=True))
    conn = op.get_bind()
    results = conn.execute("select distinct job_id from notifications")
    res = results.fetchall()

    for x in res:
        if x.job_id:
            op.execute(
                "update jobs set notifications_delivered = ("
                "select count(status) from notifications where status = 'delivered' and job_id = '{}' "
                "group by job_id)"
                "where jobs.id = '{}'".format(x.job_id, x.job_id)
            )

            op.execute(
                "update jobs set notifications_failed = ("
                "select count(status) from notifications "
                "where status in ('failed','technical-failure', 'temporary-failure', 'permanent-failure') "
                "and job_id = '{}' group by job_id)"
                "where jobs.id = '{}'".format(x.job_id, x.job_id)
            )
    op.execute("update jobs set notifications_delivered = 0 where notifications_delivered is null")
    op.execute("update jobs set notifications_failed = 0 where notifications_failed is null")
    op.alter_column("jobs", "notifications_delivered", nullable=False)
    op.alter_column("jobs", "notifications_failed", nullable=False)
    ### end Alembic commands ###


def downgrade():
    ### commands auto generated by Alembic - please adjust! ###
    op.drop_column("jobs", "notifications_failed")
    op.drop_column("jobs", "notifications_delivered")
    ### end Alembic commands ###
