# Generated by Django 5.0 on 2025-09-21 14:42

import django.db.models.deletion
from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ('app', '0062_delete_bank_remove_beneficiary_employee_and_more'),
    ]

    operations = [
        migrations.CreateModel(
            name='Customer',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('email', models.EmailField(help_text='Email unique du client', max_length=254, unique=True, verbose_name='Email')),
                ('full_name', models.CharField(max_length=255, verbose_name='Nom complet')),
                ('phone', models.CharField(blank=True, max_length=20, verbose_name='Téléphone')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Date de création')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Dernière modification')),
                ('simulation_count', models.PositiveIntegerField(default=0, verbose_name='Nombre de simulations')),
                ('last_simulation_date', models.DateTimeField(blank=True, null=True, verbose_name='Dernière simulation')),
            ],
            options={
                'verbose_name': 'Client',
                'verbose_name_plural': 'Clients',
                'ordering': ['-created_at'],
            },
        ),
        migrations.CreateModel(
            name='Simulation',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('project_type', models.CharField(choices=[('Villa', 'Villa'), ('Mini immeuble', 'Mini immeuble'), ('Immeuble', 'Immeuble'), ('Immeuble avec sous-sol', 'Immeuble avec sous-sol')], max_length=50, verbose_name='Type de projet')),
                ('standing', models.CharField(choices=[('Éco', 'Éco'), ('Moyen', 'Moyen'), ('Haut', 'Haut')], max_length=20, verbose_name='Standing')),
                ('niveau', models.CharField(choices=[('RDC', 'RDC'), ('R+1', 'R+1'), ('R+2', 'R+2'), ('R+3', 'R+3'), ('R+4', 'R+4'), ('R+5', 'R+5'), ('R+6', 'R+6'), ('R+7', 'R+7'), ('R+8', 'R+8'), ('R+9', 'R+9'), ('R+10', 'R+10')], max_length=10, verbose_name='Niveau')),
                ('region', models.CharField(choices=[('Dakar', 'Dakar'), ('Thiès', 'Thiès'), ('Diourbel', 'Diourbel'), ('Kaolack', 'Kaolack'), ('Fatick', 'Fatick'), ('Saint-Louis', 'Saint-Louis'), ('Louga', 'Louga'), ('Matam', 'Matam'), ('Tambacounda', 'Tambacounda'), ('Kédougou', 'Kédougou'), ('Kolda', 'Kolda'), ('Sédhiou', 'Sédhiou'), ('Ziguinchor', 'Ziguinchor'), ('Podor/Bakel (isolé)', 'Podor/Bakel (isolé)')], max_length=50, verbose_name='Région')),
                ('surface_terrain', models.PositiveIntegerField(verbose_name='Surface terrain (m²)')),
                ('surface_batie', models.PositiveIntegerField(verbose_name='Surface bâtie (m²)')),
                ('ascenseur', models.BooleanField(default=False, verbose_name='Ascenseur')),
                ('fondation_choice', models.CharField(choices=[('Auto', 'Automatique'), ('Semelles', 'Semelles isolées'), ('Radier', 'Radier général')], default='Auto', max_length=20, verbose_name='Choix fondation')),
                ('options_sans_prix', models.JSONField(blank=True, default=list, help_text='Liste des options sélectionnées (piscine, panneaux solaires, etc.)', verbose_name='Options sans prix')),
                ('cout_gros_oeuvre', models.BigIntegerField(verbose_name='Coût Gros Œuvre (FCFA)')),
                ('cout_second_oeuvre', models.BigIntegerField(verbose_name='Coût Second Œuvre (FCFA)')),
                ('cout_ascenseur', models.BigIntegerField(default=0, verbose_name='Coût Ascenseur (FCFA)')),
                ('cout_total', models.BigIntegerField(verbose_name='Coût Total (FCFA)')),
                ('prix_m2', models.PositiveIntegerField(verbose_name='Prix au m² (FCFA)')),
                ('status', models.CharField(choices=[('DRAFT', 'Brouillon'), ('COMPLETED', 'Terminée'), ('QUOTE_REQUESTED', 'Devis demandé'), ('QUOTE_SENT', 'Devis envoyé')], default='COMPLETED', max_length=20, verbose_name='Statut')),
                ('localisation_projet', models.CharField(blank=True, max_length=255, verbose_name='Localisation du projet')),
                ('a_terrain', models.BooleanField(blank=True, null=True, verbose_name='Possède un terrain')),
                ('adresse_terrain', models.TextField(blank=True, verbose_name='Adresse du terrain')),
                ('conseil_terrain', models.BooleanField(default=False, verbose_name='Souhaite conseil terrain')),
                ('projet_actuel', models.BooleanField(blank=True, null=True, verbose_name='Projet actuel')),
                ('delai_projet', models.CharField(blank=True, choices=[('3mois', '3 mois'), ('6mois', '6 mois'), ('1an', '1 an ou +')], max_length=20, verbose_name='Délai du projet')),
                ('a_plan', models.BooleanField(blank=True, null=True, verbose_name='Possède un plan')),
                ('message_client', models.TextField(blank=True, verbose_name='Message du client')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Date de création')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Dernière modification')),
                ('ip_address', models.GenericIPAddressField(blank=True, null=True, verbose_name='Adresse IP')),
                ('user_agent', models.TextField(blank=True, verbose_name='User Agent')),
                ('customer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='simulations', to='app.customer', verbose_name='Client')),
            ],
            options={
                'verbose_name': 'Simulation',
                'verbose_name_plural': 'Simulations',
                'ordering': ['-created_at'],
            },
        ),
    ]
