#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <exec/types.h>
#include <exec/memory.h>
#include <intuition/intuition.h>
#include <graphics/displayinfo.h>
#include <dos/dos.h>
#include <graphics/gfx.h>
#include <gtlayout.h>

#include <pragmas/gtlayout_pragmas.h>

#include <clib/exec_protos.h>
#include <clib/intuition_protos.h>
#include <clib/graphics_protos.h>
#include <clib/alib_protos.h>
#include <clib/dos_protos.h>
#include <clib/lowlevel_protos.h>
#include <clib/gtlayout_protos.h>

#include "FlashProtos/FlashAMIGAGUI.h"

enum {BUT_SCORE=1, BUT_QUIT, BUT_SAVE, BUT_PLAY, BUT_ABOUT, INT_LIVES, INT_LEVEL, CHKBOX_SOUND};

//struct Prefs settings;

void LoadPrefs(struct Prefs *sets) {
   //long resultat;
   //struct EasyStruct MyStruct;

    BPTR file;
    //long result;
    sets->sound=FALSE;
    sets->lives=3;
    sets->status=0;
    sets->startlevel=1;
    file=Open("ENVARC:FlashNG.prefs",MODE_OLDFILE);
    if (!file) SavePrefs(sets); else {Read(file,(char *)sets,sizeof(struct Prefs));
        Close(file);}

    }

void SavePrefs(struct Prefs *sets) {
    long resultat;
    struct EasyStruct MyStruct;

    BPTR file;

    file=Open("ENVARC:FlashNG.prefs",MODE_READWRITE);
    if (!file) {
                MyStruct.es_Title="Flash 1.11:  Warning";
                MyStruct.es_TextFormat="Cannot access the file\nENVARC:FlashNG.prefs ";
                MyStruct.es_GadgetFormat="Ohh ;(";
                resultat=EasyRequestArgs(NULL,&MyStruct,NULL,NULL);
               }
               else {Write(file,(char *)sets,sizeof(struct Prefs));
         Close(file);}
    }

//void main(void) {

void GUI(struct Prefs *settings) {

       struct LayoutHandle *Handle;
       struct Window *Win;
       struct Library *GTLayoutBase;
       struct TagItem GoOFF[]={GTCB_Checked,FALSE,TAG_DONE};
       long resultat;
       struct EasyStruct MyStruct;

       MyStruct.es_StructSize=sizeof(struct EasyStruct);
       MyStruct.es_Flags=0;

       if (GTLayoutBase=OpenLibrary("gtlayout.library",0)) {

       if(Handle = LT_CreateHandleTags(NULL,
          LAHN_AutoActivate,TRUE,
       TAG_DONE))
       {
          

          LT_New(Handle,
             LA_Type,      VERTICAL_KIND,  /* A vertical group. */
             LAGR_SameWidth,TRUE,
          TAG_DONE);

          LT_New(Handle,
             LA_Type,      VERTICAL_KIND,  /* A vertical group. */
             LA_LabelText, "Prefs",   /* Group title text. */
          TAG_DONE);

          LT_New(Handle,LA_Type,CHECKBOX_KIND,
                        LA_LabelText,"Sound:",
                        LA_Chars,10,
                        LA_ID,CHKBOX_SOUND,
                        TAG_DONE);


          LT_New(Handle,LA_Type,INTEGER_KIND,
                        LA_LabelText,"Start Level:",
                        LA_Chars,4,
                        LAIN_Max,4,
                        LAIN_Min,1,
                        LA_ID,INT_LEVEL,
                        TAG_DONE);

          LT_New(Handle,LA_Type,INTEGER_KIND,
                        LA_LabelText,"Total Lives:",
                        LA_Chars,4,
                        LAIN_Max,3,
                        LAIN_Min,1,
                        LA_ID,INT_LIVES,
                        TAG_DONE);
          //{
             

             LT_New(Handle,
                LA_Type,      END_KIND,    /* This ends the current group. */
             TAG_DONE);

             LT_New(Handle,
                LA_Type,      XBAR_KIND,   /* A separator bar. */
             TAG_DONE);

             LT_New(Handle,
                LA_Type,      BUTTON_KIND, /* A plain button. */
                LA_LabelText, "See Best Scores",
                LA_ID,        BUT_SCORE,
             TAG_DONE);

             LT_New(Handle,
                LA_Type,      BUTTON_KIND, /* A plain button. */
                LA_LabelText, "About",
                LA_ID,        BUT_ABOUT,
             TAG_DONE);

             LT_New(Handle,
                LA_Type,      BUTTON_KIND, /* A plain button. */
                LA_LabelText, "Play !",
                LA_ID,        BUT_PLAY,
             TAG_DONE);

             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
                        
                        TAG_DONE);

             LT_New(Handle,
                LA_Type,      BUTTON_KIND, /* A plain button. */
                LA_LabelText, "Save",
                LA_ID,        BUT_SAVE,
             TAG_DONE);

             LT_New(Handle,
                LA_Type,      BUTTON_KIND, /* A plain button. */
                LA_LabelText, "Quit...",
                LA_ID,        BUT_QUIT,
             TAG_DONE);

             LT_New(Handle,LA_Type,END_KIND,TAG_DONE);

             LT_New(Handle,
                LA_Type,      END_KIND,    /* This ends the current group. */
             TAG_DONE);
          //}

          if(Win = LT_Build(Handle,
            LAWN_Title,     "FlashNG v1.11",
            LAWN_IDCMP,     IDCMP_CLOSEWINDOW,
            WA_CloseGadget, TRUE,
          TAG_DONE))


          {

              int a;
              struct IntuiMessage *Message;
              ULONG                MsgQualifier,
                                   MsgClass;
              UWORD                MsgCode;
              struct Gadget       *MsgGadget;
              BOOL                 Done = FALSE;
              
              LoadPrefs(settings);
              LT_SetAttributes(Handle,INT_LIVES,GTIN_Number,settings->lives);
              LT_SetAttributes(Handle,INT_LEVEL,GTIN_Number,settings->startlevel);
              //printf("Vies: %d\n",settings->lives);
              //printf("Start: %d\n",settings->startlevel);


              do
              {
                  Message=(struct IntuiMessage *)WaitPort(Win -> UserPort);

                  while(Message = LT_GetIMsg(Handle))
                  {
                     MsgClass     = Message -> Class;
                     MsgCode      = Message -> Code;
                     MsgQualifier = Message -> Qualifier;
                     MsgGadget    = Message -> IAddress;

                     LT_ReplyIMsg(Message);

                     LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);

                     switch(MsgClass)
                     {
                        case IDCMP_CLOSEWINDOW:

                            Done = TRUE;
                            break;

                        case IDCMP_GADGETUP:

                            switch(MsgGadget -> GadgetID)
                            {
                                case BUT_QUIT: //printf("Quit\n");
                                               MyStruct.es_Title="Question";
                                               MyStruct.es_TextFormat="Really wanna quit ?";
                                               MyStruct.es_GadgetFormat="Yes, NOW !|Ooops no !";
                                               resultat=EasyRequestArgs(NULL,&MyStruct,NULL,NULL);
                                               if (resultat==1) Done=TRUE;
                                               //printf("Résultat: %d\n",resultat);
                                         break;
                                case BUT_PLAY:
                                        settings->status=10;
                                        Done=TRUE;
                                break;
                                case BUT_SCORE: //printf("Scores\n");
                                         MyStruct.es_Title="Flash v1.11 info";
                                         MyStruct.es_TextFormat="Not implemented yet !";
                                         MyStruct.es_GadgetFormat="Okee !";
                                         resultat=EasyRequestArgs(NULL,&MyStruct,NULL,NULL);
                                         break;

                                case BUT_ABOUT: //printf("About\n");
                                         MyStruct.es_Title="FlashNG v1.11 Info";
                                         MyStruct.es_TextFormat="FlashNG © 2001 Nogfx.\nEmail: NicoEFE@ifrance.com\na GPL Arkanoid Clone ";
                                         MyStruct.es_GadgetFormat="Okee !";
                                         resultat=EasyRequestArgs(NULL,&MyStruct,NULL,NULL);
                                         break;
                                case BUT_SAVE:
                                         SavePrefs(settings);
                                         break;
                                case INT_LIVES:
                                    a=LT_GetAttributes(Handle,INT_LIVES);
                                    settings->lives=a;
                                    //printf("Nouveau truc: %d\n",a);
                                break;
                                case INT_LEVEL:
                                    a=LT_GetAttributes(Handle,INT_LEVEL);
                                    settings->startlevel=a;
                                    //printf("Nouveau truc: %d\n",a);
                                break;
                                case CHKBOX_SOUND:
                                    //printf("Son !\n");
                                    LT_SetAttributesA(Handle,CHKBOX_SOUND,GoOFF);
                                    MyStruct.es_Title="FlashNG v1.11 info";
                                    MyStruct.es_TextFormat="Not implemented yet !";
                                    MyStruct.es_GadgetFormat="Okee !";
                                    resultat=EasyRequestArgs(NULL,&MyStruct,NULL,NULL);
                                break;
                            }

                            break;
                     }
                  }
              }
              while(!Done);
          }

          LT_DeleteHandle(Handle);
       }
    }
    }

