#include <stdio.h>
#include <stdlib.h>  
#include <string.h>
#include <gsl/gsl_statistics_double.h>
#include <gsl/gsl_errno.h>

//#include "vast_math.h"
#include "limits.h"

void bez_tochki(char *str){
 int i=0;
 while( '.'!=str[i] ){
  i+=1;
 }
 str[i]='\0';
 return;
}

void read_outdat_file(char *readfilename,double *JD, double *mag, double *magerr, int *Nobs, double *outX,double *outY){
 double X[MAX_NUMBER_OF_OBSERVATIONS],Y[MAX_NUMBER_OF_OBSERVATIONS],APP;
 char filename[OUTFILENAME_LENGTH];
 FILE *infile;
 infile=fopen(readfilename,"r");
 int i=0;
 while( -1<fscanf(infile,"%lf %lf %lf %lf %lf %lf %s",&JD[i],&mag[i],&magerr[i],&X[i],&Y[i],&APP,filename) ){
  i++;
 }
 fclose(infile);
 (*Nobs)=i;
 (*outX)=X[0];
 (*outY)=Y[0];
 fprintf(stderr,"%d %lf %lf\n",(*Nobs),(*outX),(*outY));
 return;    
}
       

int main(int argc,char *argv[]){
 FILE *outfile;
 char outfilename[100];
 char systemcmd[256];
 double JD[MAX_NUMBER_OF_OBSERVATIONS],mag[MAX_NUMBER_OF_OBSERVATIONS],mag_err[MAX_NUMBER_OF_OBSERVATIONS],TMP_MAG[MAX_NUMBER_OF_OBSERVATIONS],TMP_JD[MAX_NUMBER_OF_OBSERVATIONS];
 double last_jd,combination_interval,X,Y;
 int Nobs,i,j,k;
 int schet_f;
 if( argc==1 ){
  fprintf(stderr,"Compute median mean magnitude for interval deltaT\nUsage:\n ./combine_obs combine_interval_in_days outFILE1.dat outFILE2.dat...\n");
  exit(1);
 }
 combination_interval=atof(argv[1]);
 for(schet_f=2;schet_f<argc;schet_f++){
  sprintf(systemcmd,"sort -n %s > tmp.sort",argv[schet_f]);
  system(systemcmd);
  sprintf(systemcmd,"mv tmp.sort %s",argv[schet_f]);
  system(systemcmd); 
  read_outdat_file(argv[schet_f],JD,mag,mag_err,&Nobs,&X,&Y);
  strcpy(outfilename,argv[schet_f]);
  strcat(outfilename,".combined");
  fprintf(stderr,"%s\n",outfilename);
  outfile=fopen(outfilename,"w");
  last_jd=0;
  for(i=0;i<Nobs;i++){
   if( fabs(JD[i]-last_jd)>combination_interval ){
     last_jd=JD[i];
     for(j=0,k=0;j<Nobs;j++){
      if( fabs(JD[j]-last_jd)<combination_interval ){
       TMP_JD[k]=JD[j];
       TMP_MAG[k]=mag[j];
       k++;
      }
     }
     fprintf(outfile,"%lf %.3lf 0.00 %lf %lf 0.0 COMBINED\n",gsl_stats_mean(TMP_JD,1,k),gsl_stats_mean(TMP_MAG,1,k),X,Y);
   }
  }
  fclose(outfile);
  sprintf(systemcmd,"mv %s.combined %s ",argv[schet_f],argv[schet_f]);
  system(systemcmd);
 }
 return 0;
}
