#include <stdio.h>
#include <surround.h>

#define VERS "FreeEventMiami V1.07"
#define DATE "24.02.2000"
#define VSTRING VERS " (" DATE ")"
#define VERSTAG "\\0$VER: " VERS " (" DATE ")"

const static char VersTag[] = VERSTAG;

main(argc, argv)
int argc;
char *argv[];
{
  char teste[256], tmp[256], status[5], opcao[30], telefone[20],
       dataon[20], dataoff[20], horaon[20], horaoff[20],
       campo[256], tempoon[20], miamilog[256], remover[30],
       connect[256], timedis[30], anodis[30],
       diferenca[256], database[256], freeout[256], freein[256];
  FILE *saida;

  /* MOSTRA A SINTAXE CASO SEJA PASSADA ERRADA */
  if(argv[1] == NULL)
  {
    printf("\nFreedomEventMiami V1.08 By Cristian Robert Gallas\n");
    printf("                        Lithium Software 2000\n");
    printf("                        Compiled [24.02.2000]\n");
    printf("Sintaxe:\n");
    printf("FreeEventMiami -[online, offline] -[remove]\n");
    printf("\nonline  -> insert in event online of miami\n");
    printf("offline -> insert in passive and active event of miami\n");
    printf("remove  -> remove miami log after use\n");
    printf("This command need Freedom Assign!\n\n");
    exit(0);
  }

  strcpy(opcao, LowerCase(Copia(argv[1], 2, 30)));
  strcpy(remover, LowerCase(Copia(argv[2], 2, 30)));
  
  /* ABRE A CONFIGURACAO DO FREEDOM E LE INFORMACOES NECESSARIAS */
  strcpy(miamilog, LeRegistroDB("Freedom:Freedom.Config", "path"));
  strcpy(database, LeRegistroDB("Freedom:Freedom.Config", "databasename"));
  strcpy(timedis, LeRegistroDB("Freedom:Freedom.Config", "excededtime"));
  strcpy(anodis, LeRegistroDB("Freedom:Freedom.Config", "excededyear"));
  if(!(strcmp(miamilog, "")))
  {
    printf("\nMiamiLog not found: Configure miami path in Freedom prefs...\n\n");
    exit(0);
  }
  strcpy(teste, UltimaLinha(miamilog));
  sprintf(freeout, "%s/Freedom.Out", database);

  status[0] = teste[0];
  status[1] = teste[1];
  status[2] = teste[2];
  status[3] = '\0';

  if(!(strcmp(opcao, "online")))
  {
    strcpy(campo, LeRegistroDB("s:Freedom.Miami.Temp", "1"));
    if(strcmp(campo, "") && teste[0] != 'R')
    {
      if(saida = fopen(freeout, "a"))
        fprintf(saida, "%s,Miami\n", campo);
      fclose(saida);
      remove("s:Freedom.Miami.Temp");
    }
    /* TESTA SE TEVE RECONNECT */
    if(!strcmp(Copia2(Corta(teste, ' ', 0), 1, 3), "Rec"))
      exit(0);

    strcpy(tmp, Corta(teste, ' ', 1));
    /* ROTINA QUE TESTA SE EH LOG DO MIAMIDX */
    if(PosicaoCaracter(tmp, ':', 1) > 10)
    {
      strcpy(dataon,   Corta(tmp, ':', 0));
      strcpy(horaon,   HoraSegundo(AposCaracter(tmp, ':', 1)));
      strcpy(telefone, Corta(DeletaCaracter(Corta(teste, ' ', 2), ','), ':', 0));
      strcpy(connect,  Corta(teste, ' ', 3));

    } else {

      strcpy(dataon,   Corta(teste, ' ', 1));
      strcpy(horaon,   HoraSegundo(Corta(teste, ' ', 2)));
      strcpy(telefone, Corta(DeletaCaracter(Corta(teste, ' ', 3), ','), ':', 0));
      strcpy(connect,  Corta(teste, ' ', 4));
    }

    strcpy(telefone, RetiraPontas(telefone, 1));
    sprintf(teste, "%s,%s,%s,%s", telefone, dataon, horaon, connect);
    GravaRegistroDB("s:Freedom.Miami.Temp", teste, "1", "w");
  }

  if(!(strcmp(opcao, "offline")))
  {
    strcpy(campo, LeRegistroDB("s:Freedom.Miami.Temp", "1"));
    if(!(strcmp(campo, "")))
      exit(0);

    strcpy(telefone, Corta(campo, ',', 0));
    strcpy(dataon, Corta(campo, ',', 1));
    strcpy(horaon, Corta(campo, ',', 2));
    strcpy(connect, Corta(campo, ',', 3));

    /* TESTA SE FOR RECONNECT */
    if(teste[0] == 'R')
    {
      strcpy(tmp, Corta(teste, ' ', 1));
      /* TESTA MIAMIDX */
      if(PosicaoCaracter(tmp, ':', 1) > 10)
      {
        strcpy(dataoff, Corta(tmp, ':', 1));
        strcpy(horaoff, HoraSegundo(AposCaracter(tmp, ':', 1)));

      } else {

        strcpy(dataoff, Corta(teste, ' ', 1));
        strcpy(horaoff, HoraSegundo(Corta(teste, ' ', 2)));
      }
    } else {
      strcpy(tmp, Corta(teste, ' ', 2));
      /* TESTA MIAMIDX */
      if(PosicaoCaracter(tmp, ':', 1) > 10)
      {
        strcpy(dataoff, Corta(tmp, ':', 0));
        strcpy(horaoff, HoraSegundo(AposCaracter(tmp, ':', 1)));

      } else {

        strcpy(dataoff, Corta(teste, ' ', 2));
        strcpy(horaoff, HoraSegundo(Corta(teste, ' ', 3)));
      }
    }

    strcpy(tempoon, IntervaloHora(horaon, horaoff));
    strcpy(diferenca, Corta(DiferencaDias(Corta(campo, ',', 1), dataoff), ':', 1));
    if(atoi(diferenca) > 0)
      sprintf(tempoon, "%ld", atoi(diferenca) - atoi(tempoon));

    /** TESTA ANO INVALIDO E TIME INVALIDOS DE ACORDO COM O CONFIG */
    if((atof(tempoon) > atof(HoraSegundo(timedis))) ||
       (atof(DiaJuliano(dataon)) < atof(DiaJuliano(anodis))))
    {
      remove("s:Freedom.Miami.Temp");
      exit(0);
    }

    sprintf(freein, "%s/Freedom.%s", database, DataHora(1));
    if(saida = fopen(freein, "a"))
      fprintf(saida, "%s,%s,%s,%s,%s,%s,%s,%s\n", telefone, dataon, horaon, dataoff, horaoff, status, tempoon, connect);
    fclose(saida);
    remove("s:Freedom.Miami.Temp");
    if(!(strcmp(remover, "remove")))
    {
      remove(miamilog);
    }
  }
  exit(0);
}
