"""added master data

Revision ID: dd2a386eeb0c
Revises: ca4a89a32b78
Create Date: 2025-10-08 09:32:10.596390

"""

from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision = "dd2a386eeb0c"
down_revision = "ca4a89a32b78"
branch_labels = None
depends_on = None


def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.create_table(
        "banks",
        sa.Column("id", sa.Integer(), nullable=False),
        sa.Column("name", sa.String(length=100), nullable=False),
        sa.Column("code", sa.String(length=10), nullable=False),
        sa.Column("swift_code", sa.String(length=20), nullable=True),
        sa.Column("account_name", sa.String(length=200), nullable=False),
        sa.Column("account_number", sa.String(length=50), nullable=False),
        sa.Column("branch", sa.String(length=100), nullable=True),
        sa.Column("currency", sa.String(length=10), nullable=False),
        sa.Column("is_active", sa.Boolean(), nullable=True),
        sa.Column("display_order", sa.Integer(), nullable=True),
        sa.Column("logo_url", sa.String(length=500), nullable=True),
        sa.Column("website", sa.String(length=200), nullable=True),
        sa.Column("created_at", sa.DateTime(timezone=True), nullable=True),
        sa.Column("updated_at", sa.DateTime(timezone=True), nullable=True),
        sa.PrimaryKeyConstraint("id"),
        sa.UniqueConstraint("code"),
        sa.UniqueConstraint("name"),
    )
    op.create_table(
        "email_configs",
        sa.Column("id", sa.Integer(), nullable=False),
        sa.Column("smtp_server", sa.String(length=200), nullable=False),
        sa.Column("smtp_port", sa.Integer(), nullable=False),
        sa.Column("use_tls", sa.Boolean(), nullable=True),
        sa.Column("use_ssl", sa.Boolean(), nullable=True),
        sa.Column("username", sa.String(length=200), nullable=False),
        sa.Column("password", sa.String(length=500), nullable=False),
        sa.Column("is_encrypted", sa.Boolean(), nullable=True),
        sa.Column("from_email", sa.String(length=200), nullable=False),
        sa.Column("from_name", sa.String(length=200), nullable=False),
        sa.Column("admin_email", sa.String(length=200), nullable=False),
        sa.Column("is_active", sa.Boolean(), nullable=True),
        sa.Column("daily_limit", sa.Integer(), nullable=True),
        sa.Column("last_test_status", sa.Boolean(), nullable=True),
        sa.Column("last_test_at", sa.DateTime(timezone=True), nullable=True),
        sa.Column("created_at", sa.DateTime(timezone=True), nullable=True),
        sa.Column("updated_at", sa.DateTime(timezone=True), nullable=True),
        sa.PrimaryKeyConstraint("id"),
    )
    op.create_table(
        "notification_templates",
        sa.Column("id", sa.Integer(), nullable=False),
        sa.Column("name", sa.String(length=100), nullable=False),
        sa.Column("template_type", sa.String(length=50), nullable=False),
        sa.Column("subject", sa.String(length=200), nullable=True),
        sa.Column("body", sa.Text(), nullable=False),
        sa.Column("available_variables", sa.Text(), nullable=True),
        sa.Column("is_active", sa.Boolean(), nullable=True),
        sa.Column("is_system", sa.Boolean(), nullable=True),
        sa.Column("created_at", sa.DateTime(timezone=True), nullable=True),
        sa.Column("updated_at", sa.DateTime(timezone=True), nullable=True),
        sa.PrimaryKeyConstraint("id"),
        sa.UniqueConstraint("name"),
    )
    op.create_table(
        "paybill_configs",
        sa.Column("id", sa.Integer(), nullable=False),
        sa.Column("paybill_number", sa.String(length=20), nullable=False),
        sa.Column("business_name", sa.String(length=200), nullable=False),
        sa.Column("provider", sa.String(length=50), nullable=False),
        sa.Column("provider_type", sa.String(length=50), nullable=False),
        sa.Column("consumer_key", sa.String(length=500), nullable=True),
        sa.Column("consumer_secret", sa.String(length=500), nullable=True),
        sa.Column("passkey", sa.String(length=500), nullable=True),
        sa.Column("is_encrypted", sa.Boolean(), nullable=True),
        sa.Column("is_active", sa.Boolean(), nullable=True),
        sa.Column("is_default", sa.Boolean(), nullable=True),
        sa.Column("min_amount", sa.Numeric(precision=12, scale=2), nullable=True),
        sa.Column("max_amount", sa.Numeric(precision=12, scale=2), nullable=True),
        sa.Column("created_at", sa.DateTime(timezone=True), nullable=True),
        sa.Column("updated_at", sa.DateTime(timezone=True), nullable=True),
        sa.PrimaryKeyConstraint("id"),
        sa.UniqueConstraint("paybill_number"),
    )
    op.create_table(
        "system_configs",
        sa.Column("id", sa.Integer(), nullable=False),
        sa.Column("company_name", sa.String(length=200), nullable=False),
        sa.Column("company_address", sa.Text(), nullable=True),
        sa.Column("company_phone", sa.String(length=20), nullable=True),
        sa.Column("company_email", sa.String(length=200), nullable=True),
        sa.Column("company_website", sa.String(length=200), nullable=True),
        sa.Column("business_reg_number", sa.String(length=100), nullable=True),
        sa.Column("tax_id", sa.String(length=100), nullable=True),
        sa.Column("default_currency", sa.String(length=10), nullable=False),
        sa.Column("timezone", sa.String(length=50), nullable=False),
        sa.Column("date_format", sa.String(length=20), nullable=True),
        sa.Column("language", sa.String(length=10), nullable=True),
        sa.Column("invoice_prefix", sa.String(length=10), nullable=True),
        sa.Column("invoice_start_number", sa.Integer(), nullable=True),
        sa.Column("invoice_terms", sa.Text(), nullable=True),
        sa.Column("invoice_notes", sa.Text(), nullable=True),
        sa.Column("payment_terms_days", sa.Integer(), nullable=True),
        sa.Column(
            "late_fee_percentage", sa.Numeric(precision=5, scale=2), nullable=True
        ),
        sa.Column("admin_session_timeout", sa.Integer(), nullable=True),
        sa.Column("user_session_timeout", sa.Integer(), nullable=True),
        sa.Column("max_login_attempts", sa.Integer(), nullable=True),
        sa.Column("max_file_size_mb", sa.Integer(), nullable=True),
        sa.Column("allowed_file_types", sa.String(length=500), nullable=True),
        sa.Column("created_at", sa.DateTime(timezone=True), nullable=True),
        sa.Column("updated_at", sa.DateTime(timezone=True), nullable=True),
        sa.PrimaryKeyConstraint("id"),
    )
    op.create_table(
        "tax_configs",
        sa.Column("id", sa.Integer(), nullable=False),
        sa.Column("name", sa.String(length=100), nullable=False),
        sa.Column("rate", sa.Numeric(precision=5, scale=2), nullable=False),
        sa.Column("tax_type", sa.String(length=50), nullable=False),
        sa.Column("tax_number", sa.String(length=100), nullable=True),
        sa.Column("is_active", sa.Boolean(), nullable=True),
        sa.Column("is_default", sa.Boolean(), nullable=True),
        sa.Column("applies_to_products", sa.Boolean(), nullable=True),
        sa.Column("applies_to_services", sa.Boolean(), nullable=True),
        sa.Column("created_at", sa.DateTime(timezone=True), nullable=True),
        sa.Column("updated_at", sa.DateTime(timezone=True), nullable=True),
        sa.PrimaryKeyConstraint("id"),
    )
    op.create_table(
        "theme_colors",
        sa.Column("id", sa.Integer(), nullable=False),
        sa.Column("primary_color", sa.String(length=7), nullable=False),
        sa.Column("secondary_color", sa.String(length=7), nullable=False),
        sa.Column("accent_color", sa.String(length=7), nullable=False),
        sa.Column("background_color", sa.String(length=7), nullable=True),
        sa.Column("text_color", sa.String(length=7), nullable=True),
        sa.Column("border_color", sa.String(length=7), nullable=True),
        sa.Column("logo_url", sa.String(length=500), nullable=True),
        sa.Column("favicon_url", sa.String(length=500), nullable=True),
        sa.Column("company_name", sa.String(length=200), nullable=False),
        sa.Column("border_radius", sa.String(length=10), nullable=True),
        sa.Column("font_family", sa.String(length=100), nullable=True),
        sa.Column("is_active", sa.Boolean(), nullable=True),
        sa.Column("created_at", sa.DateTime(timezone=True), nullable=True),
        sa.Column("updated_at", sa.DateTime(timezone=True), nullable=True),
        sa.PrimaryKeyConstraint("id"),
    )
    # ### end Alembic commands ###


def downgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.drop_table("theme_colors")
    op.drop_table("tax_configs")
    op.drop_table("system_configs")
    op.drop_table("paybill_configs")
    op.drop_table("notification_templates")
    op.drop_table("email_configs")
    op.drop_table("banks")
    # ### end Alembic commands ###
