#include "struc.h"

void show_archiv(void)
{
 int press;

 do{
       clear();
       attrset(A_BOLD|COLOR_PAIR(1));
       mvprintw(11,21," -1- Nach Film suchen mit Suchbegriff \n");
       mvprintw(12,21," -2- Liste durchscrollen              \n");
       mvprintw(13,21," -3- Zurück                           \n");
       refresh();
       switch(press=mvgetch(0,0))
        {
          case '1':  attrset(COLOR_PAIR(3));
                         mvprintw(11,21," -1- Nach Film suchen mit Suchbegriff \n");
                         refresh(); usleep(400000);
                         search_mask(0);
                         break;
          case '2':  attrset(COLOR_PAIR(3));
                         mvprintw(12,21," -2- Liste durchscrollen              \n");
                         refresh(); usleep(400000);
                         show_search_scroll();
                         break;
          case '3':  attrset(COLOR_PAIR(3));
                         mvprintw(13,21," -3- Zurück                           \n");
                         refresh(); usleep(400000);
                         return;
          default :  break;
        }
       }while(press!=3);
 }

void show_work_archiv(void)
{
  int press;

 do{
       clear();
       attrset(A_BOLD|COLOR_PAIR(1));
       mvprintw(11,28," -1- Ändern                 \n");
       mvprintw(12,28," -2- Neuen Titel hinzufügen \n");
       mvprintw(13,28," -3- Titel löschen          \n");
       mvprintw(14,28," -4- Zurück                 \n");
       refresh();
       switch(press=mvgetch(0,0))
        {
          case '1':  attrset(COLOR_PAIR(3));
                         mvprintw(11,28," -1- Ändern                 \n");
                         refresh(); usleep(400000);
                         search_mask(1);
                         break;
          case '2':  attrset(COLOR_PAIR(3));
                         mvprintw(12,28," -2- Neuen Titel hinzufügen \n");
                         refresh(); usleep(400000);
                         new_title();
                         break;
          case '3':  attrset(COLOR_PAIR(3));
                         mvprintw(13,28," -3- Titel löschen          \n");
                         refresh(); usleep(400000);
                         delete_title();
                         break;
          case '4':  attrset(COLOR_PAIR(3));
                         mvprintw(14,28," -4- Zurück                 \n");
                         refresh(); usleep(400000);
                         return;
          default :  break;
        }
       }while(press!=4);
 }


void show_search_scroll(void)
{
  WINDOW *neu,*neu2;
  ARCHIV *archiv;
  int i=1, j, press;
   attrset(COLOR_PAIR(4));
  neu=newwin(7, 72, 0, 0);  //Neues Fenster mit 5 Zeilen 70 Spalten
  neu2=newwin(5, 70, 0,0);
  keypad(neu2, TRUE);
  mvwprintw(stdscr, 1,  14, "Scrollen mit 'Pfeil nach oben' und 'Pfeil nach unten'");
  mvwprintw(stdscr, 2,  10, "Auswählen mit 'Pfeil nach rechts' und Abbrechen mit 'Escape'");
  wrefresh(stdscr);
   wattrset(neu, COLOR_PAIR(2));
  box(neu, ACS_VLINE, ACS_HLINE); //Linien um das neue Fenster
  mvwin(neu, 3,5); //Fenster an die richtige Position
  mvwin(neu2,4,6);
  wrefresh(neu);  //Fenster zeichnen
  wrefresh(neu2);
  if(anfang == NULL)
    {
      fehler_curses("            Es sind keine Filme in der Liste vorhanden!!!!!!!!!  ");
      return;
    }
  archiv=anfang;
  noecho();
  do{
        wclear(neu2);

        box(neu, ACS_VLINE, ACS_HLINE); //Linien um das neue Fenster
        wrefresh(neu);

        wattrset(neu2, COLOR_PAIR(3));
        mvwprintw(neu2, 1,1, "%s",archiv->titel);
        wattrset(neu2, COLOR_PAIR(0));
        if(archiv->next != NULL)
            {
              wmove(neu2, 2, 1);
              insertln();
              mvwprintw(neu2, 2, 1, "%s",archiv->next->titel);
              if(archiv->next->next != NULL)
                {
                 wmove(neu2, 3,1);
                 insertln();
                 mvwprintw(neu2, 3,1, "%s",archiv->next->next->titel);
                }
            }
        wrefresh(neu2);
        switch(press=wgetch(neu2) )
         {
           case KEY_DOWN :  if(archiv->next != NULL)
                                              archiv=archiv->next;
                                           break;
           case KEY_UP       :  if(archiv->previous != NULL)
                                             archiv=archiv->previous;
                                           break;
           case KEY_RIGHT  : output(archiv);
                                           break;
           default                  : break;
         }
       }while(press != 27);
 }


void search_mask(int flag)
{
 WINDOW *neu;
 char film[75],input[75];
 ARCHIV *found;
 int i=1,press;

 neu=newwin(8,76,0,0);
 keypad(neu, TRUE);
 wattrset(neu, COLOR_PAIR(2));
 box(neu, ACS_VLINE, ACS_HLINE); //Linien um das neue Fenster
 mvwin(neu, 2,2); //Fenster an die richtige Position

 wattrset(neu, COLOR_PAIR(4));
 mvwprintw(neu, 3,3,"Filmtitel       :  ");
 wrefresh(neu);
 echo();
 wgetnstr(neu, film, 75);
 noecho();

 if((found=searching(film)) == NULL)
  {
   fehler_curses("                          Suche erfolglos!!!                     ");
   return;
  }
 else
   {
     wclear(neu);
     wattrset(neu, COLOR_PAIR(5));
     box(neu, ACS_VLINE, ACS_HLINE); //Linien um das neue Fenster
     wattrset(neu, COLOR_PAIR(0));
     mvwprintw(neu, 1,3,"Genere       :  %s",found->genere);
     mvwprintw(neu, 2,3,"Titel        :  %s",found->titel);
     mvwprintw(neu, 3,3,"Regie        :  %s",found->regie);
     mvwprintw(neu, 4,3,"Schauspieler :  %s",found->darsteller);
     mvwprintw(neu, 5,3,"FSK          :  %s",found->fsk);
     mvwprintw(neu, 6,3,"Jahr         :  %s",found->jahr);
     wrefresh(neu);
     if(flag==0)
        wgetch(neu);
   }
 if(flag==1)
  {
   do{
          if(i==0)
             i=6;
          else if(i==7)
            i=1;
          mvwprintw(stdscr, 0,  14, "Scrollen mit 'Pfeil nach oben' und 'Pfeil nach unten'");
          mvwprintw(stdscr, 1,  10, "Ändern mit 'Pfeil nach rechts'  und Abbrechen mit 'Escape'");
          wrefresh(stdscr);
           wattrset(neu, COLOR_PAIR(5));
          box(neu, ACS_VLINE, ACS_HLINE); //Linien um das neue Fenster
           wattrset(neu, COLOR_PAIR(0));
          wmove(neu ,i,19);
          wrefresh(neu);
          switch(press=wgetch(neu))
            {
              case KEY_DOWN  :     i++;
                                                  break;
              case KEY_UP         :    i--;
                                                  break;
              case KEY_RIGHT   :  wclrtoeol(neu);
                                                 wrefresh(neu);
                                                 echo();
                                                 wgetnstr(neu, input, 75);
                                                 noecho();
                                                 if(i==1)  strcpy(found->genere, input);
                                                 if(i==2)  strcpy(found->titel, input);
                                                 if(i==3)  strcpy(found->regie, input);
                                                 if(i==4)  strcpy(found->darsteller, input);
                                                 if(i==5)  strcpy(found->fsk, input);
                                                 if(i==6)  strcpy(found->jahr, input);
                                                 input[0]='\0';
                                                 break;
              default                    :   break;
           }
      }while(press != 27);
   }
}


void new_title(void)
{
 WINDOW *neu;
 char genere[75],titel[75],regie[75],darsteller[75],fsk[3],jahr[5];

 neu=newwin(8,76,0,0);
 keypad(neu, TRUE);
 wattrset(neu,COLOR_PAIR(5));
 box(neu, ACS_VLINE, ACS_HLINE); //Linien um das neue Fenster
 wattrset(neu,COLOR_PAIR(0));
 mvwin(neu, 1,2); //Fenster an die richtige Position
 mvwprintw(neu, 1,3,"Genere       :  ");
 mvwprintw(neu, 2,3,"Titel        :  ");
 mvwprintw(neu, 3,3,"Regie        :  ");
 mvwprintw(neu, 4,3,"Schauspieler : ");
 mvwprintw(neu, 5,3,"FSK          : ");
 mvwprintw(neu, 6,3,"Jahr         : ");
 wrefresh(neu);
 echo();
 mvwgetnstr(neu, 1,18, genere, 75);
 mvwgetnstr(neu, 2,18, titel, 75);
 mvwgetnstr(neu, 3,18, regie, 75);
 mvwgetnstr(neu, 4,18, darsteller, 75);
 mvwgetnstr(neu, 5,18, fsk, 3);
 mvwgetnstr(neu, 6,18, jahr, 5);
 noecho();

 sortieren(genere,titel,regie,darsteller,fsk,jahr);
}


void fehler_curses(char *message)
{
 WINDOW *pop;

 pop=newwin(3,75,0,0);
 wattrset(pop, COLOR_PAIR(1));
 box(pop, ACS_VLINE, ACS_HLINE); //Linien um das neue Fenster
 mvwin(pop, 20,2); //Fenster an die richtige Position
 mvwprintw(pop, 1,1,"    %s   ",message);
 wrefresh(pop) ;
 wgetch(pop);
 wclear(pop);
 wrefresh(pop);
}


void output(ARCHIV *movie)
{
 WINDOW *output;

 output=newwin(8,76,0,0);
 wattrset(output, COLOR_PAIR(5));
 box(output, ACS_VLINE, ACS_HLINE); //Linien um das neue Fenster
 keypad(output,TRUE);

   if(movie == NULL)
    {
      fehler_curses("            Es sind keine Filme in der Liste vorhanden!!!!!!!!!  ");
      return;
    }

  mvwin(output, 15,2); //Fenster an die richtige Position
  wattrset(output, COLOR_PAIR(0));
  mvwprintw(output, 1,3,"Genere       :  ");
  mvwprintw(output, 2,3,"Titel        :  ");
  mvwprintw(output, 3,3,"Regie        :  ");
  mvwprintw(output, 4,3,"Schauspieler : ");
  mvwprintw(output, 5,3,"FSK          : ");
  mvwprintw(output, 6,3,"Jahr         : ");

  mvwprintw(output, 1,18,"%s",movie->genere);
  mvwprintw(output, 2,18, "%s",movie->titel);
  mvwprintw(output, 3,18, "%s",movie->regie);
  mvwprintw(output, 4,18, "%s",movie->darsteller);
  mvwprintw(output, 5,18,"%s",movie->fsk);
  mvwprintw(output, 6,18, "%s",movie->jahr);
  wrefresh(output);
  wgetch(output);
  wclear(output);
  wrefresh(output);
}


void delete_title()
{
 WINDOW *delete;
 char search[75];

 delete=newwin(5, 76, 0, 0);
 wattrset(delete, COLOR_PAIR(5));
 box(delete, ACS_VLINE, ACS_HLINE); //Linien um das neue Fenster
 wattrset(delete, COLOR_PAIR(0));
 mvwin(delete, 2, 3);

 mvwprintw(delete, 2,2, "Welchen Film wollen sie  entfernen :   ");
 wrefresh(delete);
 echo();
 wgetnstr(delete, search, 75);
 noecho();

 loesche(search);
}




int main(int argc, char **argv)
{
 int press;
 FILE *file;

 initscr();        //Curses initialisieren

 start_color();   //Farben initialisieren
 if(has_colors () == TRUE)  //Können wir Farben benutzen
  {
   init_pair(1, COLOR_WHITE, COLOR_RED); //Weiss-Rot
   init_pair(2, COLOR_RED, COLOR_RED);  //Schwarz-Rot
   init_pair(3, COLOR_RED, COLOR_WHITE);    //Rot-Weiss
   init_pair(4, COLOR_RED,COLOR_BLACK);
   init_pair(5, COLOR_BLUE, COLOR_BLUE);
  }

 cbreak();       //nur noch STRG + S, ...+Q, ...+C werden beachtet
 noecho();       //keine Ausgabe auf dem Bildschirm
 keypad(stdscr,TRUE);  //Funk.-u.-Cursortasten als Taste behandeln

  if((loading(file)) == SUCCESS);
 else if((create_new_file(&file)) == SUCCESS)
  {
    start();
    fehler_curses("                 \"video.dat\" neu erstellt!!!                      ");
    fclose(file);
  }

 do{
        clear();
        attrset(A_BOLD|COLOR_PAIR(1));
        mvprintw(11,30," -1- Zum Filmarchiv   \n");
        mvprintw(12,30," -2- Filme verwalten  \n");
        mvprintw(13,30," -3- Programm beenden \n");
        refresh();

        switch(press=mvgetch(0,0))
         {
          case '1':  attrset(COLOR_PAIR(3));
                         mvprintw(11,30," -1- Zum Filmarchiv   \n");
                         refresh(); usleep(400000);
                         show_archiv();
                         break;
          case '2':  attrset(COLOR_PAIR(3));
                         mvprintw(12,30," -2- Filme verwalten  \n");
                         refresh(); usleep(400000);
                         show_work_archiv();
                         break;
          case '3':  attrset(COLOR_PAIR(3));
                         mvprintw(13,30," -3- Programm beenden \n");
                         refresh(); sleep(1);
                         save_file(file);
                         echo();endwin();exit(0);
          default: break;
         }
         fflush(stdin);
         refresh();
        }while(press!=3);

 endwin();   //Curses beenden
 return 0;
}
