#include <RcppArmadillo.h>
using namespace Rcpp;
using namespace arma;


// [[Rcpp::depends(RcppArmadillo)]]


// [[Rcpp::export]]
double  likloop( colvec q_num_vals, colvec q_num_weights, mat data, colvec par) {
    colvec d = data.col(0);
    colvec y = data.col(1);
    int n = data.n_rows;
    double beta1 = par(0);
    double beta0 = par(1);
    double gamma1 = par(2);
    double gamma2 = par(3);
    double alpha1 = par(4);
    double alpha0 = par(5);
    int q_num = q_num_vals.n_rows;
    mat likelihood(n,q_num);
    for( int j = 0; j < q_num; ++j ) {
        for( int i =0; i < n; ++i) {
            likelihood(i,j) = pow(R::pnorm( gamma1 * data(i,2) + gamma2*data(i,3) + q_num_vals(j),0,1,1,0),d(i)) *
                pow(R::dnorm(y(i) - beta1* data(i,2) - alpha1*q_num_vals(j) ,0,1,0),d(i)) *
                pow(1 - R::pnorm( gamma1 * data(i,2) + gamma2*data(i,3) + q_num_vals(j),0,1,1,0), 1- d(i) ) *
                pow(R::dnorm(y(i) - beta0* data(i,2) - alpha0*q_num_vals(j) ,0,1,0),1-d(i)) * q_num_weights(j) ;
        }
    }
    colvec lik = log(sum(likelihood,1));
    double negllik = -1 * sum(lik);
    return negllik;
}
