#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <strings.h>
#include <gd.h>

#include "utils.h"

/* Calculer le rectangle que va occuper le texte */
int taille_texte(int *brect, char *texte,
                 int couleur, double taille_fonte,
                 long int *taille_texte_x, long int *taille_texte_y,
                 char *fonte, char *buffer_erreur, int maxlen_erreur)
{
    char *err;
    err = gdImageStringFT(NULL, brect, couleur, fonte,
                          taille_fonte, 0.0, 0, 0, texte);
    if (err) {
        snprintf(buffer_erreur, maxlen_erreur,
                 "Erreur de calcul de la taille "
                 "prise par la fonte <%s> : " "<%s>\n", fonte, err);
        return -1;
    }
    /*
       if (strstr(fonte, "50") != NULL) {
       printf("    b[6], b[7]   b[4], b[5]\n");
       printf("   (%4d,%4d )      (%4d,%4d)\n",
       brect[6], brect[7], brect[4], brect[5]);
       printf("        +--------------+\n");
       printf("        |              |\n");
       printf("        |              |\n");
       printf("        +--------------+\n");
       printf("   (%4d,%4d)       (%4d,%4d)\n",
       brect[0], brect[1], brect[2], brect[3]);
       printf("    b[0], b[1]   b[2], b[3]\n");
       }
     */
    *taille_texte_x = (brect[2] - brect[6]) + 1;
    *taille_texte_y = (brect[3] - brect[7]) + 1;
    return 0;
}

/* Ecrire le texte */
int ecrire_texte(gdImagePtr img_dst, char *texte,
                 int dest_x, int dest_y, int couleur, double taille_fonte,
                 long int *taille_texte_x, long int *taille_texte_y,
                 char *fonte, char *buffer_erreur, int maxlen_erreur)
{
    int brect[8];
    char *err;
    int x, y;
    if (taille_texte(brect, texte, couleur,
                     taille_fonte, taille_texte_x,
                     taille_texte_y, fonte, buffer_erreur,
                     maxlen_erreur)) {
        return -1;
    }

    x = dest_x - brect[0];
    y = dest_y - brect[5];

    err = gdImageStringFT(img_dst, &brect[0], couleur,
                          fonte, taille_fonte, 0.0, x, y, texte);
    if (err) {
        snprintf(buffer_erreur, sizeof(buffer_erreur) - 1,
                 "Erreur de calcul de la fonte <%s> :"
                 " <%s>\n", fonte, err);
        return -1;
    }
    *taille_texte_x = (brect[2] - brect[6]) + 1;
    *taille_texte_y = (brect[3] - brect[7]) + 1;
    return 0;
}
