"""2.1.5

Revision ID: 486e56a62dcb
Revises: 89d24811e894
Create Date: 2025-05-13 19:49:51.271319

"""
import re

from alembic import op
import sqlalchemy as sa

# revision identifiers, used by Alembic.
revision = '486e56a62dcb'
down_revision = '89d24811e894'
branch_labels = None
depends_on = None


def upgrade() -> None:
    # ### commands auto generated by Alembic - please adjust! ###
    ### 将消息模板中的 `season`(为单数字, 且重命名需要这个字段)替换为 `season_fmt`(Sxx格式字符串) ###
    systemconfig = sa.table(
        "systemconfig",
        sa.column("key", sa.String()),
        sa.column("value", sa.JSON()),
    )
    connection = op.get_bind()
    key = "NotificationTemplates"
    row = connection.execute(
        sa.select(systemconfig.c.value).where(systemconfig.c.key == key)
    ).first()
    templates = row[0] if row else None
    if isinstance(templates, dict):
        _re = r'(?<={{)(?![^}]*[%|])(\s*)season(\s*)(?=}})|(?<={%)if\s+(?![^%]*[%|])season\s*(?=%)'
        changed = False
        for k, v in templates.items():
            # 替换season为season_fmt
            result = re.sub(_re, r'\1season_fmt\2', v)
            if result != v:
                changed = True
            templates[k] = result
        # 将更新后的模板存回系统配置
        if changed:
            connection.execute(
                systemconfig.update().where(systemconfig.c.key == key).values(
                    value=templates
                )
            )
    # ### end Alembic commands ###


def downgrade() -> None:
    pass
