"""add quotes

Revision ID: a7b8c9d0e1f2
Revises: e6f7a8b9c0d1
"""
from alembic import op
import sqlalchemy as sa

revision = "a7b8c9d0e1f2"
down_revision = "e6f7a8b9c0d1"
branch_labels = None
depends_on = None

def upgrade():
    op.create_table("quotes", sa.Column("id", sa.UUID(), primary_key=True), sa.Column("business_id", sa.UUID(), nullable=False), sa.Column("branch_id", sa.UUID()), sa.Column("customer_id", sa.UUID(), nullable=False), sa.Column("quote_number", sa.String(100), nullable=False), sa.Column("status", sa.String(20), nullable=False), sa.Column("issue_date", sa.Date(), nullable=False), sa.Column("expiry_date", sa.Date()), sa.Column("subtotal", sa.Numeric(14,2), nullable=False), sa.Column("discount", sa.Numeric(14,2), nullable=False), sa.Column("tax", sa.Numeric(14,2), nullable=False), sa.Column("total", sa.Numeric(14,2), nullable=False), sa.Column("notes", sa.Text()), sa.Column("created_by", sa.UUID(), nullable=False), sa.Column("converted_invoice_id", sa.UUID()), sa.Column("created_at", sa.DateTime(timezone=True), nullable=False), sa.Column("updated_at", sa.DateTime(timezone=True), nullable=False), sa.CheckConstraint("subtotal >= 0 AND discount >= 0 AND tax >= 0 AND total >= 0", name="ck_quote_nonnegative"), sa.ForeignKeyConstraint(["business_id"], ["businesses.id"], ondelete="CASCADE"), sa.ForeignKeyConstraint(["branch_id"], ["branches.id"], ondelete="RESTRICT"), sa.ForeignKeyConstraint(["customer_id"], ["customers.id"], ondelete="RESTRICT"), sa.ForeignKeyConstraint(["created_by"], ["users.id"], ondelete="RESTRICT"), sa.ForeignKeyConstraint(["converted_invoice_id"], ["invoices.id"], ondelete="RESTRICT"), sa.UniqueConstraint("business_id", "quote_number", name="uq_quote_business_number"), sa.UniqueConstraint("converted_invoice_id", name="uq_quote_converted_invoice"))
    op.create_index("ix_quotes_business_id", "quotes", ["business_id"]); op.create_index("ix_quotes_branch_id", "quotes", ["branch_id"]); op.create_index("ix_quotes_customer_id", "quotes", ["customer_id"])
    op.create_table("quote_items", sa.Column("id", sa.UUID(), primary_key=True), sa.Column("quote_id", sa.UUID(), nullable=False), sa.Column("product_id", sa.UUID()), sa.Column("variant_id", sa.UUID()), sa.Column("description", sa.String(500), nullable=False), sa.Column("quantity", sa.Numeric(14,4), nullable=False), sa.Column("unit_price", sa.Numeric(14,2), nullable=False), sa.Column("discount", sa.Numeric(14,2), nullable=False), sa.Column("line_total", sa.Numeric(14,2), nullable=False), sa.CheckConstraint("quantity > 0 AND unit_price >= 0 AND discount >= 0 AND line_total >= 0", name="ck_quote_item_amounts"), sa.ForeignKeyConstraint(["quote_id"], ["quotes.id"], ondelete="RESTRICT"), sa.ForeignKeyConstraint(["product_id"], ["products.id"], ondelete="RESTRICT"), sa.ForeignKeyConstraint(["variant_id"], ["product_variants.id"], ondelete="RESTRICT"))
    op.create_index("ix_quote_items_quote_id", "quote_items", ["quote_id"])

def downgrade():
    op.drop_table("quote_items"); op.drop_table("quotes")
