/**
 *   \file compress.h
 *   \brief Déclaration pour la (dé)compression d’images
 */

#ifndef SRC_COMPRESS_H_
#define SRC_COMPRESS_H_

#include "ppm.h"

#define DEFAULT_COMPRESSED_NAME "output.su"

/// Teste l’éligibilité d’un pixel à une zone
int32_t sameColor(Pixel *t_pixel, Zone *t_zone);
/// Ajoute un pixel et ses pixels connexes à une zone
void addPixelToSelectedZone(Image *t_img, int64_t t_idx, Zone *t_zone);
/// Sélectionne la zone correspondant à la couleur d'un pixel
void chooseZoneForPixel(Image *t_img, int64_t t_idx, darray *zones);
/// Créé les zones d'une image
darray *imgToZones(Image *t_img);
/// Écrit tous les \ref Segment d’une zone dans le fichier de sortie
void write_segments(FILE *t_output, darray *t_segments);
/// Écrit les données compressées dans le fichier de sortie
void write_compressed_file(Image *t_img, FILE *t_output, darray *t_zones);
/// Compresse l'image d'entrée
void compress(const char *t_input_file, const char *t_output_file,
              int32_t tolerance);

#endif /* SRC_COMPRESS_H_ */
