#include <time.h>
#include <unistd.h>
#include <termios.h>
#include <fcntl.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "KiPro.h"

#define OK 0

#define VPRINT if (verbose) printf

void usage();

void get_timecode(KiPro *kipro);
void get_available_media(KiPro *kipro);
void set_reel_num(KiPro *kipro, int n);
void set_clip_name(KiPro *kipro, const char *name);

int main(int argc, char **argv)
{

   int c, sync = 0, verbose = 0, recmode = 0, datamode = 0;
   char *host = "134.89.32.54";
   KiPro *kipro = new KiPro("test", host);
   while ( (c = getopt(argc, argv, "h:rdtvcml:e:")) != EOF )
   {
      switch (c) {
         case 'h':
         host = strdup(optarg);
         delete kipro;
         kipro = new KiPro("test", host);
         break;

         case 'r':
         recmode = 1;
         break;

         case 'd':
         datamode = 1;
         break;

         case 't':
         sync = 1;
         break;

         case 'e':
         c = atoi(optarg);
         set_reel_num(kipro, c);
         break;

         case 'l':
         set_clip_name(kipro, optarg);
         break;

         case 'c':
         get_timecode(kipro);
         break;

         case 'm':
         get_available_media(kipro);
         break;

         case 'v':
         verbose = 1;
         break;

         default:
         usage();
         return OK;

      }
   }

   // Check inputs
   //
   if ( !host )
   {
      usage();
      return 0;
   }

   // Do sync request first if requested
   //
   if (sync)
   {
      time_t now;
      time(&now);
      printf("Syncing time with Ki Pro Quad in %d seconds...\n",
              60 - (now % 60));
      c = kipro->time_sync();
      timespec ts, rem;
      clock_gettime(CLOCK_REALTIME, &ts);

      if (c != OK) return c;
   }

   if (recmode)
   {
      printf("Record Mode to Ki Pro Quad...\n");
      c = kipro->record_mode();
   }
   else if (datamode)
   {
      printf("Data Mode to Ki Pro Quad...\n");
      c = kipro->data_mode();
   }

   if (c == OK)
   {
      printf("Normal successful completion\n");
   }
   else
   {
      printf("There was an issue\n");
   }

   return c;

}

void get_timecode(KiPro *kipro)
{
   printf("Ki Pro Quad timecode is %.2f...\n", kipro->get_timecode());
}

void get_available_media(KiPro *kipro)
{
   printf("Ki Pro Quad available media is %d...\n", kipro->get_available_media());
}

void set_reel_num(KiPro *kipro, int n)
{
   kipro->set_reel_num();
}

void set_clip_name(KiPro *kipro, const char *name)
{
   kipro->set_clip_name();
}

void usage()
{
   fprintf(stderr, "USAGE: kiProTest -h host  [-p post_page]  [-g get_page]  [-m mode]\n\
    \t     host: the website hostname. ex: coding.debuntu.org  default: modtronix\n \
    \tpost_page: the page code to post. ex: \"?queryString=where\"\n \
    \t get_page: the page to retrieve. ex: index.html\n \
    \t     mode: \"record\" or \"data\" (case insensitive)\n");
}
     
     
