"""task name + rename task_dir → working_dir + rename mode → skill.

Revision ID: 0003
Revises: 0002
Create Date: 2026-05-17

三件事一把改:
- 加 `name` 列(必填,任务显示名,与工作目录解耦 —— 同 working_dir 可有多个 task)
- `task_dir` → `working_dir`(同目录跨 task 共享,语义就是"工作目录",DESIGN §7.1)
- `mode` → `skill`(跟项目 `skills/` 注册表对齐,语义"选用哪个智能体")

开发期 + 用户授权清表:TRUNCATE tasks CASCADE(messages / runs 跟着清)。
新加 `name` 列 NOT NULL,空表上加 NOT NULL 不需要 server_default + backfill 两步。

downgrade 反向同样 TRUNCATE + 删列 + 改名;数据不可恢复。
"""
from typing import Sequence, Union

from alembic import op
import sqlalchemy as sa

revision: str = "0003"
down_revision: Union[str, None] = "0002"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
    # 清掉旧数据 —— 用户授权(开发期,新 name 列 NOT NULL 不写 backfill)
    op.execute("TRUNCATE TABLE tasks CASCADE")

    # task_dir → working_dir + 索引同步
    op.drop_index("ix_tasks_user_task_dir", table_name="tasks")
    op.alter_column("tasks", "task_dir", new_column_name="working_dir")
    op.create_index("ix_tasks_user_working_dir", "tasks", ["user_id", "working_dir"])

    # mode → skill(对齐 skills/ 注册表语义)
    op.alter_column("tasks", "mode", new_column_name="skill")

    # name 列必填,空表上 NOT NULL 加列不需要 default + UPDATE 两步
    op.add_column("tasks", sa.Column("name", sa.Text(), nullable=False))


def downgrade() -> None:
    op.execute("TRUNCATE TABLE tasks CASCADE")
    op.drop_column("tasks", "name")
    op.alter_column("tasks", "skill", new_column_name="mode")
    op.drop_index("ix_tasks_user_working_dir", table_name="tasks")
    op.alter_column("tasks", "working_dir", new_column_name="task_dir")
    op.create_index("ix_tasks_user_task_dir", "tasks", ["user_id", "task_dir"])
