from operation import Operation, TypeOperation
from decimal import Decimal

class Compte:
    def __init__(self, id: int, banque):
        self.id = id
        self.banque = banque
        self.solde = Decimal("0")
        self.operations = []

    def crediter(self, montant: Decimal):
        if montant <= 0:
            raise ValueError("Le montant doit être positif.")

        self.solde += montant

    def debiter(self, montant: Decimal):
        if montant <= 0:
            raise ValueError("Le montant doit être positif.")

        if montant > self.solde:
            raise ValueError("Solde insuffisant.")

        self.solde -= montant

    def deposer(self, montant: Decimal):
        self.crediter(montant)

        operation = Operation(
            id=self.banque.nouvel_id_operation(),
            date=self.banque.date_actuelle(),
            type=TypeOperation.DEPOT,
            montant=montant,
            compte_destination=self.id
        )
        self.operations.append(operation)

    def retirer(self, montant: Decimal):
        self.debiter(montant)

        operation = Operation(
            id=self.banque.nouvel_id_operation(),
            date=self.banque.date_actuelle(),
            type=TypeOperation.RETRAIT,
            montant=montant,
            compte_source=self.id
        )
        self.operations.append(operation)

    def __str__(self):
        return f" {self.banque.nom} - Compte {self.id} - Solde : {self.solde:.2f} €"