# machine.py
"""
Module Machine simulé pour Python PC.
Permet d'importer machine.Pin et machine.I2C
dans les drivers MicroPython sans avoir de matériel.
"""

class Pin:
    OUT = 1
    IN = 0

    def __init__(self, pin_number, mode=None, value=None):
        self.pin_number = pin_number
        self.mode = mode
        self.value_state = value

    def value(self, v=None):
        """Simule pin.value() de MicroPython"""
        if v is None:
            return self.value_state
        self.value_state = v


class I2C:
    def __init__(self, id, scl=None, sda=None, freq=400000):
        """
        Simulation minimale :
        - accepte les mêmes arguments que MicroPython
        - stocke uniquement les infos
        """
        self.id = id
        self.scl = scl
        self.sda = sda
        self.freq = freq

    # --- Méthodes factices utilisées par les drivers ---

    def readfrom_mem(self, addr, reg, nbytes):
        """
        Dans la version simulée, on ne fait rien.
        On renvoie des zéros pour éviter les crashes.
        """
        return bytes([0] * nbytes)

    def readfrom_mem_into(self, addr, reg, buf):
        """
        Remplit le buffer de zéros.
        """
        for i in range(len(buf)):
            buf[i] = 0

    def writeto_mem(self, addr, reg, buf):
        """
        Dans la simulation, cette méthode ne fait rien.
        Elle existe seulement pour éviter les erreurs.
        """
        pass

    def scan(self):
        """Renvoie une liste vide pour la simulation."""
        return []
