"""master

Revision ID: 322e44198dd6
Revises: 843bf3a9b75e
Create Date: 2026-01-14 15:13:21.974610

"""
from typing import Sequence, Union

from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql

# revision identifiers, used by Alembic.
revision: str = '322e44198dd6'
down_revision: Union[str, None] = '843bf3a9b75e'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
    # ### commands auto generated by Alembic - please adjust! ###
    op.drop_index('idx_chat_sessions_branch_id', table_name='smart_inventory_chat_sessions')
    op.drop_index('idx_chat_sessions_chat_session_id', table_name='smart_inventory_chat_sessions')
    op.drop_index('idx_chat_sessions_company_id', table_name='smart_inventory_chat_sessions')
    op.drop_index('idx_chat_sessions_store_id', table_name='smart_inventory_chat_sessions')
    op.drop_index('idx_chat_sessions_user_id', table_name='smart_inventory_chat_sessions')
    op.drop_index('idx_chat_messages_created_at', table_name='smart_inventory_chat_messages')
    op.drop_index('idx_chat_messages_session_id', table_name='smart_inventory_chat_messages')
    op.drop_table('smart_inventory_chat_messages')
    op.drop_table('smart_inventory_chat_sessions')
    op.drop_index('idx_monthly_forecast_training_logs_company_id', table_name='monthly_forecast_training_logs')
    op.drop_index('idx_monthly_forecast_training_logs_training_date', table_name='monthly_forecast_training_logs')
    op.drop_index('idx_reorder_policies_company_id', table_name='reorder_policies')
    op.drop_index('idx_reorder_policies_location_id', table_name='reorder_policies')
    op.drop_index('idx_reorder_policies_product_id', table_name='reorder_policies')
    op.add_column('users', sa.Column('sso_key', sa.String(), nullable=True))
    # ### end Alembic commands ###


def downgrade() -> None:
    # ### commands auto generated by Alembic - please adjust! ###
    op.drop_column('users', 'sso_key')
    op.create_index('idx_reorder_policies_product_id', 'reorder_policies', ['product_id'], unique=False)
    op.create_index('idx_reorder_policies_location_id', 'reorder_policies', ['location_id'], unique=False)
    op.create_index('idx_reorder_policies_company_id', 'reorder_policies', ['company_id'], unique=False)
    op.create_index('idx_monthly_forecast_training_logs_training_date', 'monthly_forecast_training_logs', ['training_date'], unique=False)
    op.create_index('idx_monthly_forecast_training_logs_company_id', 'monthly_forecast_training_logs', ['company_id'], unique=False)
    op.create_table('smart_inventory_chat_messages',
    sa.Column('id', sa.INTEGER(), autoincrement=True, nullable=False),
    sa.Column('session_id', sa.INTEGER(), autoincrement=False, nullable=False),
    sa.Column('role', sa.VARCHAR(length=20), autoincrement=False, nullable=False),
    sa.Column('content', sa.TEXT(), autoincrement=False, nullable=False),
    sa.Column('created_at', postgresql.TIMESTAMP(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP'), autoincrement=False, nullable=True),
    sa.CheckConstraint("role::text = ANY (ARRAY['user'::character varying, 'assistant'::character varying]::text[])", name='chk_chat_messages_role'),
    sa.ForeignKeyConstraint(['session_id'], ['smart_inventory_chat_sessions.id'], name='fk_chat_messages_session', ondelete='CASCADE'),
    sa.PrimaryKeyConstraint('id', name='smart_inventory_chat_messages_pkey')
    )
    op.create_index('idx_chat_messages_session_id', 'smart_inventory_chat_messages', ['session_id'], unique=False)
    op.create_index('idx_chat_messages_created_at', 'smart_inventory_chat_messages', ['created_at'], unique=False)
    op.create_table('smart_inventory_chat_sessions',
    sa.Column('id', sa.INTEGER(), autoincrement=True, nullable=False),
    sa.Column('chat_session_id', sa.VARCHAR(length=36), autoincrement=False, nullable=False),
    sa.Column('company_id', sa.INTEGER(), autoincrement=False, nullable=False),
    sa.Column('user_id', sa.INTEGER(), autoincrement=False, nullable=False),
    sa.Column('store_id', sa.INTEGER(), autoincrement=False, nullable=False),
    sa.Column('branch_id', sa.INTEGER(), autoincrement=False, nullable=False),
    sa.Column('chat_name', sa.VARCHAR(length=100), autoincrement=False, nullable=True),
    sa.Column('created_at', postgresql.TIMESTAMP(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP'), autoincrement=False, nullable=True),
    sa.Column('updated_at', postgresql.TIMESTAMP(timezone=True), server_default=sa.text('CURRENT_TIMESTAMP'), autoincrement=False, nullable=True),
    sa.ForeignKeyConstraint(['branch_id'], ['branches.branch_id'], name='fk_chat_sessions_branch', ondelete='CASCADE'),
    sa.ForeignKeyConstraint(['store_id'], ['stores.store_id'], name='fk_chat_sessions_store', ondelete='CASCADE'),
    sa.ForeignKeyConstraint(['user_id'], ['users.user_id'], name='fk_chat_sessions_user', ondelete='CASCADE'),
    sa.PrimaryKeyConstraint('id', name='smart_inventory_chat_sessions_pkey'),
    sa.UniqueConstraint('chat_session_id', name='smart_inventory_chat_sessions_chat_session_id_key')
    )
    op.create_index('idx_chat_sessions_user_id', 'smart_inventory_chat_sessions', ['user_id'], unique=False)
    op.create_index('idx_chat_sessions_store_id', 'smart_inventory_chat_sessions', ['store_id'], unique=False)
    op.create_index('idx_chat_sessions_company_id', 'smart_inventory_chat_sessions', ['company_id'], unique=False)
    op.create_index('idx_chat_sessions_chat_session_id', 'smart_inventory_chat_sessions', ['chat_session_id'], unique=False)
    op.create_index('idx_chat_sessions_branch_id', 'smart_inventory_chat_sessions', ['branch_id'], unique=False)
    # ### end Alembic commands ###
