#include "pct-tools.h"

/* Resize 'in' image xRate larger and yRate taller */
gdImagePtr image_resize(gdImagePtr in, double xRate, double yRate)
{
  // Create new image with correct resolution
  gdImagePtr out = gdImageCreate(in->sx*xRate, in->sy*yRate);

  // Copy current image
  gdImageCopyResized (
    out, in, 0, 0, 0, 0,
    out->sx, out->sy,
    in->sx, in->sy
  );

  // Return gdImagePtr
  return out;
}

/* Print application usage */
static int usage(const char *exe)
{
  printf("usage: %s xRate yRate [...]\n", exe);
  printf("\nWhere 'xRate' and 'yRate' are resizing ratios, ");
  printf("followed by file names.\n");
  return (-1);
}

/* Main function */
int main(int argc, char **argv)
{
  FILE *in;
  int format;
  double xRate, yRate;
  gdImagePtr inImage = NULL, outImage;

  // Verify arguments
  if (argc < 3)
    return usage(argv[0]);

  // Reading coefficients
  xRate = atof(argv[1]);
  yRate = atof(argv[2]);
  if (xRate <= 0 || yRate <= 0)
  {
    usage(argv[0]);
    printf("Error : resizing coefficients must be reals!\n");
    return (-2);
  }

  // Resize each file
  for (argc--; argc > 2; argc--)
  {
    // Open current file
    if (!(in = fopen(argv[argc], "rb")))
    {
      printf("File %s doesn't exist !\n", argv[argc]);
      continue;
    }

    // Find image type
    format = image_type(argv[argc]);

    // Read it with GD
    if (format == JPEG_FORMAT)
      inImage = gdImageCreateFromJpeg(in);
    else if (format == PNG_FORMAT)
      inImage = gdImageCreateFromPng(in);
    else if (format == GIF_FORMAT)
      inImage = gdImageCreateFromGif(in);

    // Close file desc.
    fclose(in);

    // Resize input image
    if (inImage)
    {
      outImage = image_resize(inImage, xRate, yRate);
      image_save(outImage, argv[argc]);
      gdImageDestroy(outImage);
      gdImageDestroy(inImage);
    }
  }

  // End of processus
  return 0;
}
