"""Initial migration

Revision ID: 7d7b6034fa60
Revises: 
Create Date: 2024-07-31 11:38:24.347306

"""
from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision = '7d7b6034fa60'
down_revision = None
branch_labels = None
depends_on = None


def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.create_table('company',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('name', sa.String(length=120), nullable=False),
    sa.Column('created_at', sa.DateTime(), nullable=True),
    sa.Column('updated_at', sa.DateTime(), nullable=True),
    sa.PrimaryKeyConstraint('id', name=op.f('pk_company')),
    sa.UniqueConstraint('name', name=op.f('uq_company_name'))
    )
    op.create_table('gismapserver',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('url', sa.String(length=512), nullable=False),
    sa.Column('description', sa.String(length=512), nullable=True),
    sa.PrimaryKeyConstraint('id', name=op.f('pk_gismapserver')),
    sa.UniqueConstraint('url', name=op.f('uq_gismapserver_url'))
    )
    op.create_table('role',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('name', sa.String(length=64), nullable=True),
    sa.PrimaryKeyConstraint('id', name=op.f('pk_role')),
    sa.UniqueConstraint('name', name=op.f('uq_role_name'))
    )
    op.create_table('folder',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('name', sa.String(length=128), nullable=False),
    sa.Column('map_server_id', sa.Integer(), nullable=False),
    sa.ForeignKeyConstraint(['map_server_id'], ['gismapserver.id'], name=op.f('fk_folder_map_server_id_gismapserver')),
    sa.PrimaryKeyConstraint('id', name=op.f('pk_folder'))
    )
    op.create_table('plan',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('name', sa.String(length=64), nullable=False),
    sa.Column('description', sa.Text(), nullable=True),
    sa.Column('cost', sa.Numeric(precision=10, scale=2), nullable=False),
    sa.Column('usage_limit', sa.Integer(), nullable=False),
    sa.Column('company_id', sa.Integer(), nullable=False),
    sa.Column('created_at', sa.DateTime(), nullable=True),
    sa.Column('updated_at', sa.DateTime(), nullable=True),
    sa.ForeignKeyConstraint(['company_id'], ['company.id'], name=op.f('fk_plan_company_id_company')),
    sa.PrimaryKeyConstraint('id', name=op.f('pk_plan')),
    sa.UniqueConstraint('name', name=op.f('uq_plan_name'))
    )
    op.create_table('user',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('first_name', sa.String(length=64), nullable=True),
    sa.Column('last_name', sa.String(length=64), nullable=True),
    sa.Column('email', sa.String(length=120), nullable=True),
    sa.Column('company_id', sa.Integer(), nullable=True),
    sa.Column('password_hash', sa.String(length=128), nullable=True),
    sa.Column('created_at', sa.DateTime(), nullable=True),
    sa.Column('updated_at', sa.DateTime(), nullable=True),
    sa.ForeignKeyConstraint(['company_id'], ['company.id'], name='fk_user_company'),
    sa.PrimaryKeyConstraint('id', name=op.f('pk_user'))
    )
    with op.batch_alter_table('user', schema=None) as batch_op:
        batch_op.create_index(batch_op.f('ix_user_email'), ['email'], unique=True)

    op.create_table('billing_info',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('user_id', sa.Integer(), nullable=True),
    sa.Column('business_name', sa.String(length=120), nullable=True),
    sa.Column('business_address', sa.String(length=120), nullable=True),
    sa.Column('first_name', sa.String(length=64), nullable=True),
    sa.Column('last_name', sa.String(length=64), nullable=True),
    sa.Column('business_sector', sa.String(length=120), nullable=True),
    sa.Column('country', sa.String(length=64), nullable=True),
    sa.ForeignKeyConstraint(['user_id'], ['user.id'], name=op.f('fk_billing_info_user_id_user')),
    sa.PrimaryKeyConstraint('id', name=op.f('pk_billing_info'))
    )
    op.create_table('notification',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('user_id', sa.Integer(), nullable=True),
    sa.Column('notification_email', sa.String(length=120), nullable=True),
    sa.Column('newsletter_notifications', sa.Boolean(), nullable=True),
    sa.Column('invoice_notifications', sa.Boolean(), nullable=True),
    sa.Column('delivery_notifications', sa.Boolean(), nullable=True),
    sa.Column('email_notifications', sa.Boolean(), nullable=True),
    sa.ForeignKeyConstraint(['user_id'], ['user.id'], name=op.f('fk_notification_user_id_user')),
    sa.PrimaryKeyConstraint('id', name=op.f('pk_notification'))
    )
    op.create_table('profile',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('user_id', sa.Integer(), nullable=True),
    sa.Column('street_address', sa.String(length=120), nullable=True),
    sa.Column('city', sa.String(length=120), nullable=True),
    sa.Column('state', sa.String(length=120), nullable=True),
    sa.Column('phone_number', sa.String(length=20), nullable=True),
    sa.Column('location', sa.String(length=120), nullable=True),
    sa.Column('currency', sa.String(length=20), nullable=True),
    sa.Column('profile_picture', sa.String(length=120), nullable=True),
    sa.ForeignKeyConstraint(['user_id'], ['user.id'], name=op.f('fk_profile_user_id_user')),
    sa.PrimaryKeyConstraint('id', name=op.f('pk_profile'))
    )
    op.create_table('service',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('name', sa.String(length=128), nullable=False),
    sa.Column('type', sa.String(length=64), nullable=False),
    sa.Column('map_server_id', sa.Integer(), nullable=True),
    sa.Column('folder_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['folder_id'], ['folder.id'], name=op.f('fk_service_folder_id_folder')),
    sa.ForeignKeyConstraint(['map_server_id'], ['gismapserver.id'], name=op.f('fk_service_map_server_id_gismapserver')),
    sa.PrimaryKeyConstraint('id', name=op.f('pk_service'))
    )
    op.create_table('subscription_plan',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('user_id', sa.Integer(), nullable=True),
    sa.Column('plan_name', sa.String(length=120), nullable=True),
    sa.Column('sites_per_month', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['user_id'], ['user.id'], name=op.f('fk_subscription_plan_user_id_user')),
    sa.PrimaryKeyConstraint('id', name=op.f('pk_subscription_plan'))
    )
    op.create_table('user_roles',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('user_id', sa.Integer(), nullable=True),
    sa.Column('role_id', sa.Integer(), nullable=True),
    sa.ForeignKeyConstraint(['role_id'], ['role.id'], name=op.f('fk_user_roles_role_id_role'), ondelete='CASCADE'),
    sa.ForeignKeyConstraint(['user_id'], ['user.id'], name=op.f('fk_user_roles_user_id_user'), ondelete='CASCADE'),
    sa.PrimaryKeyConstraint('id', name=op.f('pk_user_roles'))
    )
    op.create_table('user_settings',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('user_id', sa.Integer(), nullable=False),
    sa.Column('theme_layout', sa.String(length=20), nullable=False),
    sa.Column('direction_layout', sa.String(length=20), nullable=False),
    sa.Column('color_theme_layout', sa.String(length=20), nullable=False),
    sa.Column('page_layout', sa.String(length=20), nullable=False),
    sa.Column('layout', sa.String(length=20), nullable=False),
    sa.Column('sidebar_type', sa.String(length=20), nullable=False),
    sa.Column('card_layout', sa.String(length=20), nullable=False),
    sa.ForeignKeyConstraint(['user_id'], ['user.id'], name=op.f('fk_user_settings_user_id_user')),
    sa.PrimaryKeyConstraint('id', name=op.f('pk_user_settings'))
    )
    op.create_table('layer',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('name', sa.String(length=128), nullable=False),
    sa.Column('latitude', sa.Float(), nullable=True),
    sa.Column('longitude', sa.Float(), nullable=True),
    sa.Column('service_id', sa.Integer(), nullable=False),
    sa.ForeignKeyConstraint(['service_id'], ['service.id'], name=op.f('fk_layer_service_id_service')),
    sa.PrimaryKeyConstraint('id', name=op.f('pk_layer'))
    )
    # ### end Alembic commands ###


def downgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.drop_table('layer')
    op.drop_table('user_settings')
    op.drop_table('user_roles')
    op.drop_table('subscription_plan')
    op.drop_table('service')
    op.drop_table('profile')
    op.drop_table('notification')
    op.drop_table('billing_info')
    with op.batch_alter_table('user', schema=None) as batch_op:
        batch_op.drop_index(batch_op.f('ix_user_email'))

    op.drop_table('user')
    op.drop_table('plan')
    op.drop_table('folder')
    op.drop_table('role')
    op.drop_table('gismapserver')
    op.drop_table('company')
    # ### end Alembic commands ###
