"""Add offers table

Revision ID: 4db3d5f94ae2
Revises: f1c290243dc9
Create Date: 2026-06-30 03:45:00.000000

"""
from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision = '4db3d5f94ae2'
down_revision = 'f1c290243dc9'
branch_labels = None
depends_on = None


def upgrade():
    op.create_table(
        'offers',
        sa.Column('listing_id', sa.BigInteger().with_variant(sa.Integer(), 'sqlite'), nullable=False),
        sa.Column('conversation_id', sa.BigInteger().with_variant(sa.Integer(), 'sqlite'), nullable=False),
        sa.Column('buyer_id', sa.BigInteger().with_variant(sa.Integer(), 'sqlite'), nullable=False),
        sa.Column('seller_id', sa.BigInteger().with_variant(sa.Integer(), 'sqlite'), nullable=False),
        sa.Column('amount', sa.Numeric(10, 2), nullable=False),
        sa.Column('optional_message', sa.String(length=300), nullable=True),
        sa.Column('status', sa.Enum('pending', 'accepted', 'rejected', 'countered', 'withdrawn', 'expired', name='offer_status'), nullable=False),
        sa.Column('id', sa.BigInteger().with_variant(sa.Integer(), 'sqlite'), autoincrement=True, nullable=False),
        sa.Column('public_id', sa.CHAR(length=36), nullable=False),
        sa.Column('created_at', sa.DateTime(), nullable=False),
        sa.Column('updated_at', sa.DateTime(), nullable=False),
        sa.ForeignKeyConstraint(['buyer_id'], ['users.id']),
        sa.ForeignKeyConstraint(['conversation_id'], ['conversations.id']),
        sa.ForeignKeyConstraint(['listing_id'], ['listings.id']),
        sa.ForeignKeyConstraint(['seller_id'], ['users.id']),
        sa.PrimaryKeyConstraint('id'),
        sa.UniqueConstraint('public_id'),
    )
    with op.batch_alter_table('offers', schema=None) as batch_op:
        batch_op.create_index(batch_op.f('ix_offers_buyer_id'), ['buyer_id'], unique=False)
        batch_op.create_index(batch_op.f('ix_offers_conversation_id'), ['conversation_id'], unique=False)
        batch_op.create_index(batch_op.f('ix_offers_created_at'), ['created_at'], unique=False)
        batch_op.create_index(batch_op.f('ix_offers_listing_id'), ['listing_id'], unique=False)
        batch_op.create_index(batch_op.f('ix_offers_seller_id'), ['seller_id'], unique=False)
        batch_op.create_index(batch_op.f('ix_offers_status'), ['status'], unique=False)


def downgrade():
    op.drop_table('offers')
