import os
import random
import time
import shutil

clear = lambda: os.system("clear")

COLS, ROWS = shutil.get_terminal_size((80, 24))

# 🎨 Cores ANSI
cores = {
    "vermelho": "\033[31m",
    "verde": "\033[32m",
    "azul": "\033[34m",
    "amarelo": "\033[33m",
    "ciano": "\033[36m",
    "magenta": "\033[35m",
    "branco": "\033[97m",
    "preto": "\033[30m",
    "reset": "\033[0m"
}

# 🧾 Entrada
entrada = input("P> ") or "01"
entrada_cores = input("C> ").lower().split()
tempo = int(input("T> "))
velocidade = int(input("V> "))

# 🎯 Delay baseado na velocidade
delay = max(0.01, 0.1 * (100 / max(velocidade, 1)))

# 🎨 Filtrar cores
cores_escolhidas = [cores[c] for c in entrada_cores if c in cores]
if not cores_escolhidas:
    cores_escolhidas = [cores["verde"]]

# 🌧️ Criar colunas
colunas = []
for x in range(COLS):
    colunas.append({
        "y": random.randint(-ROWS, 0),
        "vel": random.uniform(0.5, 2.0),
        "tamanho": random.randint(4, 15),
        "cor": random.choice(cores_escolhidas)
    })

inicio = time.time()

try:
    while time.time() - inicio < tempo:
        tela = [[" "]*COLS for _ in range(ROWS)]

        for x in range(COLS):
            c = colunas[x]
            y = int(c["y"])
            tamanho = c["tamanho"]
            cor_base = c["cor"]

            for i in range(tamanho):
                pos_y = y - i
                if 0 <= pos_y < ROWS:
                    ch = random.choice(entrada)

                    # 🎨 efeito tipo cmatrix
                    if i == 0:
                        cor = cores["branco"]  # cabeça brilhante
                    elif i < 3:
                        cor = cor_base         # cor escolhida
                    else:
                        cor = "\033[2m" + cor_base  # fade

                    tela[pos_y][x] = cor + ch + cores["reset"]

            # Movimento natural
            c["y"] += c["vel"]

            # Reset aleatório
            if c["y"] - tamanho > ROWS:
                c["y"] = random.randint(-20, 0)
                c["vel"] = random.uniform(0.5, 2.0)
                c["tamanho"] = random.randint(4, 15)
                c["cor"] = random.choice(cores_escolhidas)

        clear()
        for linha in tela:
            print("".join(linha))

        time.sleep(delay)

except KeyboardInterrupt:
    clear()
    print("Matrix encerrado")
