from collections import deque, OrderedDict

class AppState:
    def __init__(self):
        # --- Logs do Sistema ---
        self.logs = deque(maxlen=1000)
        
        # --- Referência ao Watcher ---
        self.watcher = None
        
        # --- Lista de Tarefas ---
        self.tasks = OrderedDict()
        
        # --- Variáveis de Estado ---
        self.current_file = ""

    def log(self, message):
        """Adiciona log e printa no console"""
        print(message) 
        self.logs.append(message)

    def update_task(self, filename, status, progress=0, label=None, file_progress=0, speed=''):
        """
        Atualiza o status de um arquivo.
        progress: Progresso Global da Tarefa (0-100)
        file_progress: Progresso da Conversão do Arquivo (0-100)
        speed: Velocidade de conversão (ex: 8.5x)
        """
        # Se não existe, cria
        if filename not in self.tasks:
            self.tasks[filename] = {
                'status': 'pending', 
                'progress': 0, 
                'file_progress': 0,
                'speed': '',
                'label': label or filename
            }
            # Limita a 20 itens
            if len(self.tasks) > 20:
                self.tasks.popitem(last=False) 
        
        # Atualiza dados
        self.tasks[filename]['status'] = status
        self.tasks[filename]['progress'] = progress
        self.tasks[filename]['file_progress'] = file_progress
        self.tasks[filename]['speed'] = speed
        
        if label: 
            self.tasks[filename]['label'] = label

    def get_logs(self):
        return list(self.logs)

# --- INSTÂNCIA GLOBAL ---
state = AppState()