#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif

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

#include <getopt.h>
#include <stdlib.h>
#include <vdr/interface.h>
#include <vdr/plugin.h>
#include <unistd.h>
#include "menu.h"
#include "config.h"
#include "cUntermenuVdrconvert.h"
#include "cUntermenuVdrconvertItem.h"
#include "cProjektBearbeiten.h"
#include "cProjektEinstellen.h"
#include "cProjektStarter.h"


// --- cUntermenu ------------------------------------------------------------
cUntermenu::cUntermenu(char *myBeschreibung,int myProjekttyp) : cOsdMenu(tr(myBeschreibung), 12, 6)
{
  
  VdrconvertSetup.aktProjekttyp=myProjekttyp;

  SetHelp();
  
  Add(new cUntermenuVdrconvertItem(tr("edit project"),1));
  Add(new cUntermenuVdrconvertItem(tr("remove project"),2));
  Add(new cUntermenuVdrconvertItem(tr("setup project"),3));
  Add(new cUntermenuVdrconvertItem(tr("start project"),4));
}

cUntermenu::~cUntermenu(){
}

eOSState cUntermenu::eintragAuswahl() {
  cUntermenuVdrconvertItem *item = (cUntermenuVdrconvertItem*)Get(Current());
  if (item) {
    if (item->aktionstyp==1){//bearbeiten
      AddSubMenu(new cProjektBearbeiten(item->beschreibung));
    } else if (item->aktionstyp==2){//löschen
      if (Interface->Confirm(tr("really remove project?"))){
	char *datei;
	//Projektdatei
	asprintf(&datei,"%s",VdrconvertSetup.gibDateiname(VdrconvertSetup.aktProjekttyp));
	FILE *fi = fopen (datei, "w");
	//TODO Fehlerabfrage
	fclose(fi);

	//Einstellungsdatei
	asprintf(&datei,"%s.setup",VdrconvertSetup.gibDateiname(VdrconvertSetup.aktProjekttyp));
	fi = fopen (datei, "w");
	//TODO Fehlerabfrage
	fclose(fi);
	Skins.Message(mtStatus, tr("done"));
	free(datei);
      }
    } else if (item->aktionstyp==3){//Einstellungen
      AddSubMenu(new cProjektEinstellen(item->beschreibung));
    } else if (item->aktionstyp==4){//starten
      if (Interface->Confirm(tr("really start project?"))){
	starten();
	return osEnd;
      }
    } else{
      Skins.Message(mtError, "Sollte nie auftreten!");
    }
    Skins.Flush();
  }
  
  return osContinue;
}

void cUntermenu::starten(){
  //  Skins.Message(mtStatus, "noch in Arbeit!");
  printf("Starte\n");
  cProjektStarter *starter=new cProjektStarter();
}

eOSState cUntermenu::ProcessKey(eKeys Key){
  eOSState state = cOsdMenu::ProcessKey(Key);

  if (state == osUnknown) {
    switch (Key) {
    case kOk:
      if (!HasSubMenu())
	eintragAuswahl();
      state = osContinue;
      break;
    default:
      break;
    }//switch
  }//if

  return state;
}

void cUntermenu::SetHelp() {
  cOsdMenu::SetHelp(NULL);
}
