"""rename_tables

Revision ID: dc4fd60e0465
Revises: f0b5bf93cfe6
Create Date: 2020-12-18 10:34:22.433625

"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy import func
import sys
from pathlib import Path
sys.path.append(str(Path(".").resolve()))
from cmf.manage import *

# revision identifiers, used by Alembic.
revision = 'dc4fd60e0465'
down_revision = 'f0b5bf93cfe6'
branch_labels = None
depends_on = None


def upgrade():
    with op.get_context().autocommit_block():
        op.rename_table('cmf_u_work_task', 'cmf_task')
        op.rename_table('cmf_u_work_task_executors', 'cmf_task_executors')
        op.rename_table('cmf_u_work_task_related_objects', 'cmf_task_related_objects')
        op.rename_table('cmf_u_work_task_spectators', 'cmf_task_spectators')

        op.rename_table('cmf_u_work_list', 'cmf_list')
        op.rename_table('cmf_u_work_list_executors', 'cmf_list_executors')
        op.rename_table('cmf_u_work_list_related_objects', 'cmf_list_related_objects')
        op.rename_table('cmf_u_work_list_spectators', 'cmf_list_spectators')
        op.rename_table('cmf_u_work_list_members', 'cmf_list_members')

        op.rename_table('cmf_u_work_chat_group', 'cmf_chat_group')
        op.rename_table('cmf_u_work_chat_group_executors', 'cmf_chat_group_executors')
        op.rename_table('cmf_u_work_chat_group_related_objects', 'cmf_chat_group_related_objects')
        op.rename_table('cmf_u_work_chat_group_spectators', 'cmf_chat_group_spectators')

        op.rename_table('cmf_u_work_chat_topic', 'cmf_chat_topic')
        op.rename_table('cmf_u_work_chat_topic_executors', 'cmf_chat_topic_executors')
        op.rename_table('cmf_u_work_chat_topic_related_objects', 'cmf_chat_topic_related_objects')
        op.rename_table('cmf_u_work_chat_topic_spectators', 'cmf_chat_topic_spectators')
        op.drop_constraint('cmf_kanban_status_work_list_id_fkey', 'cmf_kanban_status', type_='foreignkey')
        op.drop_constraint('cmf_u_work_chat_topic_group_id_fkey', 'cmf_chat_topic', type_='foreignkey')

    with APP.test_request_context('/'):
        s = models.CmfTask.dp.data_driver.Session()
        s.query_deprecated(models.CmfTask.dp_model.id).update(
            {models.CmfTask.dp_model.id: func.replace(models.CmfTask.dp_model.id, 'CmfUWorkTask', 'CmfTask')},
            synchronize_session=False)
        sa_model = models.CmfTaskExecutors.dp_model
        s.query_deprecated(sa_model.left_id).update(
            {sa_model.left_id: func.replace(sa_model.left_id, 'CmfUWorkTask', 'CmfTask')},
            synchronize_session=False)
        sa_model = models.CmfTaskSpectators.dp_model
        s.query_deprecated(sa_model.left_id).update(
            {sa_model.left_id: func.replace(sa_model.left_id, 'CmfUWorkTask', 'CmfTask')},
            synchronize_session=False)
        sa_model = models.CmfTaskRelated_objects.dp_model
        s.query_deprecated(sa_model.left_id).update(
            {sa_model.left_id: func.replace(sa_model.left_id, 'CmfUWorkTask', 'CmfTask')},
            synchronize_session=False)
        sa_model = models.CmfListMembers.dp_model
        s.query_deprecated(sa_model.right_id).filter(sa_model.right_id.like('CmfUWorkTask%')).update(
            {sa_model.right_id: func.replace(sa_model.right_id, 'CmfUWorkTask', 'CmfTask')},
            synchronize_session=False)
        field = models.CmfAttachment.dp_model.parent_id
        s.query_deprecated(field).filter(field.like('CmfUWorkTask%')).update(
            {field: func.replace(field, 'CmfUWorkTask', 'CmfTask')},
            synchronize_session=False)
        for field in [models.CmfKanbanStatusObjects.dp_model.right_id, models.CmfEvent.dp_model.object_id,
                      models.CmfEvent.dp_model.view_object_id, models.CmfComment.dp_model.parent_id]:
            s.query_deprecated(field).filter(field.like('CmfUWorkTask%')).update(
                {field: func.replace(field, 'CmfUWorkTask', 'CmfTask')},
                synchronize_session=False)
        s.commit()
        # UWorkList
        _fields = [models.CmfListExecutors.dp_model.left_id, models.CmfListSpectators.dp_model.left_id,
                   models.CmfListRelated_objects.dp_model.left_id,
                   models.CmfListMembers.dp_model.left_id, models.CmfKanbanStatus.dp_model.work_list_id,
                   models.CmfList.dp_model.id]
        for field in _fields:
            s.query_deprecated(field).filter(field.like('CmfUWorkList%')).update(
                {field: func.replace(field, 'CmfUWorkList', 'CmfList')},
                synchronize_session=False)
        s.commit()
        # Chats
        _fields = [models.CmfChatGroupExecutors.dp_model.left_id, models.CmfChatGroupSpectators.dp_model.left_id,
                   models.CmfChatGroupRelated_objects.dp_model.left_id, models.CmfChatGroup.dp_model.id,
                   models.CmfComment.dp_model.parent_id, models.CmfChatTopic.dp_model.group_id,
                   models.CmfEvent.dp_model.object_id,
                   models.CmfEvent.dp_model.view_object_id
                   ]
        for field in _fields:
            s.query_deprecated(field).filter(field.like('CmfUWorkChatGroup%')).update(
                {field: func.replace(field, 'CmfUWorkChatGroup', 'CmfChatGroup')},
                synchronize_session=False)

        _fields = [models.CmfChatTopicExecutors.dp_model.left_id, models.CmfChatTopicSpectators.dp_model.left_id,
                   models.CmfChatTopicRelated_objects.dp_model.left_id, models.CmfChatTopic.dp_model.id,
                   models.CmfComment.dp_model.parent_id, models.CmfChatGroup.dp_model.last_topic_id,
                   models.CmfEvent.dp_model.object_id,
                   models.CmfEvent.dp_model.view_object_id
                   ]
        for field in _fields:
            s.query_deprecated(field).filter(field.like('CmfUWorkChatTopic%')).update(
                {field: func.replace(field, 'CmfUWorkChatTopic', 'CmfChatTopic')},
                synchronize_session=False)
        s.commit()


def downgrade():
    pass
