"""rename back text to transcript

Revision ID: 38a927dcb099
Revises: 9920ecfe2735
Create Date: 2023-11-02 19:53:09.116240

"""

from typing import Sequence, Union

import sqlalchemy as sa
from alembic import op
from sqlalchemy import select
from sqlalchemy.sql import column, table

# revision identifiers, used by Alembic.
revision: str = "38a927dcb099"
down_revision: Union[str, None] = "9920ecfe2735"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
    # bind the engine
    bind = op.get_bind()

    # Reflect the table
    transcript = table("transcript", column("id", sa.String), column("topics", sa.JSON))

    # Select all rows from the transcript table
    results = bind.execute(select([transcript.c.id, transcript.c.topics]))

    for row in results:
        transcript_id = row["id"]
        topics_json = row["topics"]

        # Process each topic in the topics JSON array
        updated_topics = []
        for topic in topics_json:
            if "text" in topic:
                # Rename key 'text' back to 'transcript'
                topic["transcript"] = topic.pop("text")
            updated_topics.append(topic)

        # Update the transcript table
        bind.execute(
            transcript.update()
            .where(transcript.c.id == transcript_id)
            .values(topics=updated_topics)
        )


def downgrade() -> None:
    # bind the engine
    bind = op.get_bind()

    # Reflect the table
    transcript = table("transcript", column("id", sa.String), column("topics", sa.JSON))

    # Select all rows from the transcript table
    results = bind.execute(select([transcript.c.id, transcript.c.topics]))

    for row in results:
        transcript_id = row["id"]
        topics_json = row["topics"]

        # Process each topic in the topics JSON array
        updated_topics = []
        for topic in topics_json:
            if "transcript" in topic:
                # Rename key 'transcript' to 'text'
                topic["text"] = topic.pop("transcript")
            updated_topics.append(topic)

        # Update the transcript table
        bind.execute(
            transcript.update()
            .where(transcript.c.id == transcript_id)
            .values(topics=updated_topics)
        )
