from matrix import get_size, pmx
import imageio
import matplotlib.pyplot as plt
import numpy as np
from copy import deepcopy


class Animate:
    def __init__(self, mx, day="CHANGEME"):
        self.mx= mx
        _size = get_size(mx)
        self.height = _size[0]
        self.width = _size[1]
        self.day = day
        self.frames = [deepcopy(mx)]

    def add_frame(self, frame):
        self.frames.append(deepcopy(frame))

    def print(self):
        for f in self.frames:
            pmx(f)
            print("-")


    def animate(self, save=False, or_frames=False):
        last_file = 0
        for f_idx, frame in enumerate(self.frames):
            current = np.zeros_like(self.mx)
            for y, row in enumerate(frame):
                for x, col in enumerate(row):
                    current[y][x] = frame[y][x]
            pmx(current)
    
            fig, ax = plt.subplots()
            ax.imshow(current, cmap=plt.cm.gray)
            ax.axis("off")
            if save:
                plt.savefig(f"{self.day}/{f_idx:03}.png")
            plt.close()
    
        with imageio.get_writer(f"{self.day}/day{self.day}.gif", mode="I") as writer:
            names = [f"{self.day}/{x:03}.png" for x in range(len(self.frames))]
            for filename in names:
                try:
                    image = imageio.imread(filename)
                    writer.append_data(image)
                except FileNotFoundError:
                    pass
