"""phase14 proactive agent + multimodal: errand_task/errand_step/proactive_card/weekly_review

Revision ID: p14b2c3d4e5f6
Revises: p13a1b2c3d4e5
Create Date: 2026-06-15 07:00:00.000000

"""

from typing import Sequence, Union

import sqlalchemy as sa
import sqlmodel
from alembic import op

revision: str = "p14b2c3d4e5f6"
down_revision: Union[str, Sequence[str], None] = "p13a1b2c3d4e5"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None

S = sqlmodel.sql.sqltypes.AutoString


def upgrade() -> None:
    op.create_table(
        "errand_task",
        sa.Column("id", S(), nullable=False),
        sa.Column("kind", S(), nullable=False),
        sa.Column("title", S(), nullable=False),
        sa.Column("goal", S(), nullable=False),
        sa.Column("target", S(), nullable=True),
        sa.Column("tone", S(), nullable=False),
        sa.Column("status", S(), nullable=False),
        sa.Column("autonomy_at_start", S(), nullable=False),
        sa.Column("approval_id", S(), nullable=True),
        sa.Column("result_summary", S(), nullable=True),
        sa.Column("model", S(), nullable=False),
        sa.Column("created_at", sa.DateTime(), nullable=False),
        sa.Column("updated_at", sa.DateTime(), nullable=False),
        sa.ForeignKeyConstraint(["approval_id"], ["approval.id"]),
        sa.PrimaryKeyConstraint("id"),
    )
    op.create_table(
        "errand_step",
        sa.Column("id", S(), nullable=False),
        sa.Column("errand_id", S(), nullable=False),
        sa.Column("seq", sa.Integer(), nullable=False),
        sa.Column("phase", S(), nullable=False),
        sa.Column("tool", S(), nullable=True),
        sa.Column("label", S(), nullable=False),
        sa.Column("detail", S(), nullable=True),
        sa.Column("external_effect", sa.Boolean(), nullable=False),
        sa.Column("state", S(), nullable=False),
        sa.Column("created_at", sa.DateTime(), nullable=False),
        sa.ForeignKeyConstraint(["errand_id"], ["errand_task.id"]),
        sa.PrimaryKeyConstraint("id"),
    )
    op.create_index("ix_errand_step_errand_id", "errand_step", ["errand_id"])
    op.create_table(
        "proactive_card",
        sa.Column("id", S(), nullable=False),
        sa.Column("kind", S(), nullable=False),
        sa.Column("icon", S(), nullable=False),
        sa.Column("tone", S(), nullable=False),
        sa.Column("title", S(), nullable=False),
        sa.Column("why", S(), nullable=False),
        sa.Column("cta", S(), nullable=True),
        sa.Column("action_kind", S(), nullable=True),
        sa.Column("action_payload", S(), nullable=True),
        sa.Column("detected_at", S(), nullable=False),
        sa.Column("status", S(), nullable=False),
        sa.Column("created_at", sa.DateTime(), nullable=False),
        sa.PrimaryKeyConstraint("id"),
    )
    op.create_table(
        "weekly_review",
        sa.Column("id", S(), nullable=False),
        sa.Column("week_label", S(), nullable=False),
        sa.Column("deep_work_h", sa.Float(), nullable=False),
        sa.Column("meeting_h", sa.Float(), nullable=False),
        sa.Column("done_count", sa.Integer(), nullable=False),
        sa.Column("auto_count", sa.Integer(), nullable=False),
        sa.Column("saved_minutes", sa.Integer(), nullable=False),
        sa.Column("patterns_json", S(), nullable=False),
        sa.Column("note", S(), nullable=True),
        sa.Column("created_at", sa.DateTime(), nullable=False),
        sa.PrimaryKeyConstraint("id"),
    )


def downgrade() -> None:
    op.drop_table("weekly_review")
    op.drop_table("proactive_card")
    op.drop_index("ix_errand_step_errand_id", table_name="errand_step")
    op.drop_table("errand_step")
    op.drop_table("errand_task")
