# Generated by Django 4.2.5 on 2025-09-10 13:27

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import uuid


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name="Account",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        help_text="Identifiant unique UUID",
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, help_text="Date et heure de création"
                    ),
                ),
                (
                    "updated_at",
                    models.DateTimeField(
                        auto_now=True,
                        help_text="Date et heure de dernière modification",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(
                        default=True, help_text="Indique si l'enregistrement est actif"
                    ),
                ),
                (
                    "name",
                    models.CharField(max_length=255, verbose_name="Nom du compte"),
                ),
                (
                    "type",
                    models.CharField(
                        choices=[
                            ("CURRENT", "Compte Courant"),
                            ("SAVINGS", "Compte Épargne"),
                            ("SHARE_CAPITAL", "Compte de Capital Social"),
                            ("CASH_DESK", "Caisse de Guichet"),
                            ("MOBILE_MONEY", "Compte Mobile Money"),
                            ("LOAN_FUND", "Fonds de Prêt"),
                            ("INTEREST_INCOME", "Revenus d'Intérêts"),
                            ("LOAN_LOSS_RESERVE", "Réserve pour Créances Douteuses"),
                        ],
                        max_length=20,
                        verbose_name="Type de compte",
                    ),
                ),
                (
                    "balance",
                    models.DecimalField(
                        decimal_places=2, default=0, max_digits=15, verbose_name="Solde"
                    ),
                ),
                (
                    "iban",
                    models.CharField(
                        blank=True,
                        max_length=34,
                        null=True,
                        unique=True,
                        verbose_name="IBAN",
                    ),
                ),
                (
                    "account_number",
                    models.CharField(
                        blank=True,
                        max_length=50,
                        null=True,
                        unique=True,
                        verbose_name="Numéro de Compte",
                    ),
                ),
                (
                    "account_manager",
                    models.ForeignKey(
                        blank=True,
                        limit_choices_to={"is_staff": True},
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="managed_accounts",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="Gestionnaire de Compte",
                    ),
                ),
                (
                    "created_by",
                    models.ForeignKey(
                        blank=True,
                        help_text="Utilisateur ayant créé cet enregistrement",
                        null=True,
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="%(class)s_created",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "owner",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="accounts",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="Propriétaire",
                    ),
                ),
                (
                    "updated_by",
                    models.ForeignKey(
                        blank=True,
                        help_text="Utilisateur ayant modifié cet enregistrement",
                        null=True,
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="%(class)s_updated",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
            options={
                "verbose_name": "Compte",
                "verbose_name_plural": "Comptes",
                "db_table": "banking_account",
                "ordering": ["-created_at"],
                "abstract": False,
            },
        ),
        migrations.CreateModel(
            name="Transaction",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        help_text="Identifiant unique UUID",
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, help_text="Date et heure de création"
                    ),
                ),
                (
                    "updated_at",
                    models.DateTimeField(
                        auto_now=True,
                        help_text="Date et heure de dernière modification",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(
                        default=True, help_text="Indique si l'enregistrement est actif"
                    ),
                ),
                (
                    "amount",
                    models.DecimalField(
                        decimal_places=2, max_digits=15, verbose_name="Montant"
                    ),
                ),
                (
                    "description",
                    models.CharField(max_length=255, verbose_name="Description"),
                ),
                (
                    "transaction_date",
                    models.DateTimeField(
                        auto_now_add=True, verbose_name="Date de transaction"
                    ),
                ),
                (
                    "category",
                    models.CharField(
                        choices=[
                            ("deposit", "Dépôt"),
                            ("withdrawal", "Retrait"),
                            ("transfer", "Virement"),
                            ("fee", "Frais"),
                            ("interest", "Intérêts"),
                            ("penalty", "Pénalité"),
                            ("correction", "Correction"),
                            ("opening", "Ouverture"),
                            ("closing", "Fermeture"),
                            ("solidarity_fund", "Fonds de Solidarité"),
                            ("credit", "Crédit"),
                            ("debit", "Débit"),
                            ("share_subscription", "Souscription de Parts"),
                            ("share_payment", "Paiement de Parts"),
                            ("share_transfer", "Transfert de Parts"),
                            ("share_redemption", "Rachat de Parts"),
                            ("dividend_payment", "Paiement de Dividende"),
                            ("membership_fee", "Frais d'Adhésion"),
                            ("founder_payment", "Paiement Fondateur"),
                            ("founder_dividend", "Dividende Fondateur"),
                            ("loan_disbursement", "Décaissement de Prêt"),
                            ("loan_repayment", "Remboursement de Prêt"),
                            ("loan_interest", "Intérêts sur Prêt"),
                            ("loan_penalty", "Pénalité de Prêt"),
                            ("loan_fee", "Frais de Prêt"),
                            ("system", "Système"),
                            ("administrative", "Administration"),
                        ],
                        max_length=50,
                        verbose_name="Catégorie de Transaction",
                    ),
                ),
                (
                    "created_by",
                    models.ForeignKey(
                        blank=True,
                        help_text="Utilisateur ayant créé cet enregistrement",
                        null=True,
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="%(class)s_created",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "from_account",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="outgoing_transactions",
                        to="banking.account",
                        verbose_name="Compte source",
                    ),
                ),
                (
                    "to_account",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="incoming_transactions",
                        to="banking.account",
                        verbose_name="Compte destination",
                    ),
                ),
                (
                    "updated_by",
                    models.ForeignKey(
                        blank=True,
                        help_text="Utilisateur ayant modifié cet enregistrement",
                        null=True,
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="%(class)s_updated",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
            options={
                "verbose_name": "Transaction",
                "verbose_name_plural": "Transactions",
                "db_table": "banking_transaction",
                "ordering": ["-created_at"],
                "abstract": False,
            },
        ),
    ]
