"""Junta os quadros PNG gravados pelo Movie Maker do Godot num GIF animado para o portfólio.

Uso (no terminal, na pasta onde está este arquivo):
    python quadros_para_gif.py PASTA_DOS_QUADROS saida.gif

Opções:
    --largura 400   largura do GIF em pixels (a altura acompanha)
    --pular 2       usa 1 quadro a cada 2 (GIF menor)
    --fps 15        quadros por segundo da gravação (o mesmo do --fixed-fps)

Precisa da biblioteca Pillow:  python -m pip install pillow
"""
import argparse
import glob
import os

from PIL import Image


def principal():
    leitor = argparse.ArgumentParser(description="Quadros PNG do Godot para GIF animado")
    leitor.add_argument("pasta")
    leitor.add_argument("saida")
    leitor.add_argument("--largura", type=int, default=400)
    leitor.add_argument("--pular", type=int, default=2)
    leitor.add_argument("--fps", type=int, default=15)
    opcoes = leitor.parse_args()

    arquivos = sorted(glob.glob(os.path.join(opcoes.pasta, "*.png")))[:: opcoes.pular]
    if not arquivos:
        print("Nenhum PNG encontrado em", opcoes.pasta)
        return

    quadros = []
    for arquivo in arquivos:
        imagem = Image.open(arquivo).convert("RGB")
        altura = round(imagem.height * opcoes.largura / imagem.width)
        quadros.append(imagem.resize((opcoes.largura, altura), Image.LANCZOS))

    # Tempo de cada quadro em milissegundos, para o GIF andar na velocidade certa.
    duracao = round(1000 * opcoes.pular / opcoes.fps)
    quadros[0].save(opcoes.saida, save_all=True, append_images=quadros[1:], duration=duracao, loop=0, optimize=True)
    tamanho = os.path.getsize(opcoes.saida) / 1024
    print(f"{opcoes.saida}: {len(quadros)} quadros, {tamanho:.0f} KB")


if __name__ == "__main__":
    principal()
