"""Refactor email

Revision ID: 818bb0f07e9b
Revises: 7a7d61641dd2
Create Date: 2024-03-07 16:17:12.669422

"""

from collections.abc import Sequence

import sqlalchemy as sa
from alembic import op

# revision identifiers, used by Alembic.
revision: str = "818bb0f07e9b"
down_revision: str | None = "7a7d61641dd2"
branch_labels: str | Sequence[str] | None = None
depends_on: str | Sequence[str] | None = None


def upgrade() -> None:
    # ### commands auto generated by Alembic - please adjust! ###
    op.add_column("stores", sa.Column("email_settings", sa.JSON(), nullable=True))
    op.execute(
        """ UPDATE stores
            SET email_settings = jsonb_build_object(
                'address', COALESCE(email, ''),
                'host', COALESCE(email_host, ''),
                'port', COALESCE(email_port, 25),
                'user', COALESCE(email_user, ''),
                'password', COALESCE(email_password, ''),
                'auth_mode', CASE
                                WHEN email_use_ssl THEN 'starttls'
                                ELSE 'ssl/tls'
                            END
            );
        """
    )
    op.drop_index("stores_email_idx", table_name="stores")
    op.drop_column("stores", "email_user")
    op.drop_column("stores", "email_password")
    op.drop_column("stores", "email")
    op.drop_column("stores", "email_host")
    op.drop_column("stores", "email_use_ssl")
    op.drop_column("stores", "email_port")
    # ### end Alembic commands ###


def downgrade() -> None:
    # ### commands auto generated by Alembic - please adjust! ###
    op.add_column("stores", sa.Column("email_port", sa.INTEGER(), autoincrement=False, nullable=True))
    op.add_column("stores", sa.Column("email_use_ssl", sa.BOOLEAN(), autoincrement=False, nullable=True))
    op.add_column("stores", sa.Column("email_host", sa.TEXT(), autoincrement=False, nullable=True))
    op.add_column("stores", sa.Column("email", sa.TEXT(), autoincrement=False, nullable=True))
    op.add_column("stores", sa.Column("email_password", sa.TEXT(), autoincrement=False, nullable=True))
    op.add_column("stores", sa.Column("email_user", sa.TEXT(), autoincrement=False, nullable=True))
    op.create_index("stores_email_idx", "stores", ["email"], unique=False)
    op.drop_column("stores", "email_settings")
    # ### end Alembic commands ###
