#ifndef BAYESIANETAS_ETAS_H
#define BAYESIANETAS_ETAS_H

#ifdef __cplusplus
extern "C" {
#endif

void estimateETASBranchingC(double *ts, double *marks, int *branching,
                            int *n, double *maxTime, double *M0,
                            int *sims, int *numMCMCSamples, double *mu,
                            double *K, double *alpha, double *c, double *p,
                            double *c_lower, double *mus, double *Ks,
                            double *alphas, double *cs, double *ps,
                            int *cp_accept, int *cp_total,
                            int *kappa_accept, int *kappa_total);

void estimateSpatialETASBranchingC(double *ts, double *marks, double *xs,
                                   double *ys, int *branching, int *n,
                                   double *maxTime, double *M0, double *area,
                                   int *sims, int *numMCMCSamples,
                                   double *mu, double *K, double *alpha,
                                   double *c, double *p, double *c_lower,
                                   double *param1, double *param2,
                                   double *sigma2_prior_shape,
                                   double *sigma2x_prior_rate,
                                   double *sigma2y_prior_rate, double *mus,
                                   double *Ks, double *alphas, double *cs,
                                   double *ps, double *param1s,
                                   double *param2s, int *cp_accept,
                                   int *cp_total, int *kappa_accept,
                                   int *kappa_total, int *gaussian);

void estimateETASDirectC(double *ts, double *marks, int *n, double *maxTime,
                         double *M0, int *sims, double *mu, double *K,
                         double *alpha, double *c, double *p, double *mus,
                         double *Ks, double *alphas, double *cs,
                         double *ps);

void estimateBranchingC(double *ts, double *marks, int *n, double *M0,
                        int *sims, double *mu, double *K, double *alpha,
                        double *c, double *p, int *branchings);

void estimateSpatialBranchingC(double *ts, double *marks, double *xs,
                               double *ys, int *n, double *M0, double *area,
                               int *sims, double *mu, double *K,
                               double *alpha, double *c, double *p,
                               double *param1, double *param2,
                               int *branchings, int *gaussian);

void ETASlikelihoodC(double *ts, double *marks, int *n, double *maxTime,
                     double *M0, double *mu, double *K, double *alpha,
                     double *c, double *p, double *loglik);

void ETASspatiallikelihoodC(double *ts, double *marks, double *xs,
                            double *ys, int *n, double *maxTime,
                            double *M0, double *area, double *mu,
                            double *K, double *alpha, double *c, double *p,
                            double *param1, double *param2, double *loglik);

#ifdef __cplusplus
}
#endif

#endif
