using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
using System.Drawing.Imaging; 
namespace CG67.FicheCollege
{
    public class HttpHandlerHistogramme : IHttpHandler
    {

        public bool IsReusable
        {
            get { return true; }
        }

        public void ProcessRequest(HttpContext context)
        {
            const int ecartEntreBarre = 10;
            const int largeurBarre = 30;

            // recupération des parametres
            int largeur = Convert.ToInt32(context.Request["l"]);
            int hauteur = Convert.ToInt32(context.Request["h"]);
            Color fond = Color.FromArgb(Convert.ToInt32(context.Request["f"]));
            int nbBarre = Convert.ToInt32(context.Request["nb"]);

            decimal[] valeurs = new decimal[nbBarre];
            Color[] couleurs = new Color[nbBarre];
            string[] legende = new string[nbBarre];
            decimal valeurMaxi = decimal.MinValue;
            decimal valeurMini = decimal.MaxValue;

            //  chargement des valeurs et détermination de la valeur maxi et mini (bien que cette dernière ne serve pas pour le moment)
            for (int i = 1; i < nbBarre + 1; i++)
            {
                valeurs[i - 1] = Convert.ToInt32(context.Request[string.Format("v{0}", i)]);
                couleurs[i - 1] = Color.FromArgb(Convert.ToInt32(context.Request[string.Format("c{0}", i)]));
                legende[i - 1] = context.Request[string.Format("t{0}", i)];
                if (i == 1)
                {
                    valeurMaxi = valeurs[i - 1];
                    valeurMini = valeurs[i - 1];
                }
                else
                {
                    if (valeurs[i - 1] > valeurMaxi)
                        valeurMaxi = valeurs[i - 1];
                    if (valeurs[i - 1] < valeurMini)
                        valeurMini = valeurs[i - 1];
                }
            }
            // calcul de l'échelle
            decimal echelle = (hauteur - 40) / valeurMaxi;
            Bitmap graphique = new Bitmap(largeur, hauteur);
            Graphics g = Graphics.FromImage(graphique);

            // affichage du fond d'écran

            SolidBrush pinceau = new SolidBrush(fond);
            g.FillRectangle(pinceau, 0, 0, largeur, hauteur);
            pinceau.Dispose();
            SolidBrush stylo = new SolidBrush(Color.Black);
            Font police = new Font("Arial", 10, FontStyle.Bold);
            // affichage des barres
            for (int i = 0; i < nbBarre; i++)
            {
                pinceau = new SolidBrush(couleurs[i]);
                g.FillRectangle(pinceau, ecartEntreBarre + ((largeurBarre + ecartEntreBarre) * i), (float)(hauteur - 20 - valeurs[i] * echelle), largeurBarre, (float)(valeurs[i] * echelle));
                g.DrawString(valeurs[i].ToString(), police, stylo, ecartEntreBarre + ((largeurBarre + ecartEntreBarre) * i), (float)(hauteur - 35 - valeurs[i] * echelle));
                pinceau.Dispose();
                g.DrawString(legende[i], police, stylo, ecartEntreBarre + ((largeurBarre + ecartEntreBarre) * i), (float)(hauteur - 20));
            }
            stylo.Dispose();
            // Envoi de l'image dans le flux http de sortie
            context.Response.ContentType = "image/bitmap";
            graphique.Save(context.Response.OutputStream, ImageFormat.Gif);

            // libération des ressources
            graphique.Dispose();
            g.Dispose();
        }


    }
}
