"""Add dealer vehicle templates

Revision ID: 0555d041141d
Revises: c6ff2b6054ac
Create Date: 2026-07-21 16:22:42.532415

"""
from typing import Sequence, Union

from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision: str = '0555d041141d'
down_revision: Union[str, None] = 'c6ff2b6054ac'
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.create_table('dealer_vehicle_template',
    sa.Column('template_id', sa.UUID(), nullable=False),
    sa.Column('dealer_id', sa.String(length=50), nullable=False),
    sa.Column('name', sa.String(length=100), nullable=False),
    sa.Column('model_id', sa.UUID(), nullable=False),
    sa.Column('body_type_id', sa.UUID(), nullable=False),
    sa.Column('segment_id', sa.UUID(), nullable=False),
    sa.Column('created_at', sa.DateTime(timezone=True), nullable=True),
    sa.Column('updated_at', sa.DateTime(timezone=True), nullable=True),
    sa.ForeignKeyConstraint(['body_type_id'], ['body_type_master.body_type_id'], ),
    sa.ForeignKeyConstraint(['dealer_id'], ['customer_master.customer_id'], ),
    sa.ForeignKeyConstraint(['model_id'], ['vehicle_model_master.model_id'], ),
    sa.ForeignKeyConstraint(['segment_id'], ['customer_segment_master.segment_id'], ),
    sa.PrimaryKeyConstraint('template_id')
    )
    op.create_table('dealer_vehicle_template_feature',
    sa.Column('id', sa.UUID(), nullable=False),
    sa.Column('template_id', sa.UUID(), nullable=False),
    sa.Column('feature_id', sa.UUID(), nullable=False),
    sa.Column('feature_option_id', sa.UUID(), nullable=True),
    sa.Column('bool_value', sa.Boolean(), nullable=True),
    sa.Column('text_value', sa.Text(), nullable=True),
    sa.ForeignKeyConstraint(['feature_id'], ['special_feature_master.feature_id'], ),
    sa.ForeignKeyConstraint(['feature_option_id'], ['special_feature_option_master.option_id'], ),
    sa.ForeignKeyConstraint(['template_id'], ['dealer_vehicle_template.template_id'], ondelete='CASCADE'),
    sa.PrimaryKeyConstraint('id'),
    sa.UniqueConstraint('template_id', 'feature_id', name='uq_template_feature')
    )
    # ### end Alembic commands ###


def downgrade() -> None:
    # ### commands auto generated by Alembic - please adjust! ###
    op.drop_table('dealer_vehicle_template_feature')
    op.drop_table('dealer_vehicle_template')
    # ### end Alembic commands ###
