
model{
  
  # prior distributions for species-specific intercept
  mu_b1 ~ dunif(-10, 10)
  mu_b2 ~ dunif(-10, 10)
  mu_b3 ~ dunif(-10, 10)
  sd_b1 ~ dunif(0, 10)
  sd_b2 ~ dunif(0, 10)
  sd_b3 ~ dunif(0, 10)
  tau_b1 <- sd_b1 ^ (-2)
  tau_b2 <- sd_b2 ^ (-2)
  tau_b3 <- sd_b3 ^ (-2)
  a1[1] ~ dunif(-10, 10)
  a2[1] ~ dunif(-10, 10)
  a3[1] ~ dunif(-10, 10)
  
  # prior distribution for 2-way interaction
  f12 ~ dlogis(0, 1)
  f13 ~ dlogis(0, 1)
  f23 ~ dlogis(0, 1)
  
  for(k in 1:K){  # looping through all occupancy slope coefficients
    b1[k] ~ dlogis(0, 1)  # prior for slope coefficients
    b2[k] ~ dlogis(0, 1)
    b3[k] ~ dlogis(0, 1)
  }
  
  for(l in 2:L){  # looping through all detection covariates
    a1[l] ~ dlogis(0, 1)  # prior for slope coefficients
    a2[l] ~ dlogis(0, 1)
    a3[l] ~ dlogis(0, 1)
  }
  
  for(m in 1:M){  # looping through all unique point counts
    b0_1[m] ~ dnorm(mu_b1, tau_b1)
    b0_2[m] ~ dnorm(mu_b2, tau_b2)
    b0_3[m] ~ dnorm(mu_b3, tau_b3)
  }

  for(i in 1:N){  # looping through all sites
  
    # first order linear predictors
    f1[i] <- b0_1[site[i]] + inprod(b1[1:K], x[i, 1:K])
    f2[i] <- b0_2[site[i]] + inprod(b2[1:K], x[i, 1:K])
    f3[i] <- b0_3[site[i]] + inprod(b3[1:K], x[i, 1:K])
  
    # probability weights for combinations of 1s and 0s
    psi[i, 1] <- exp(f1[i] + f2[i] + f3[i] + f12 + f13 + f23)  # 111
    psi[i, 2] <- exp(f1[i] + f2[i] + f12)  # 110
    psi[i, 3] <- exp(f1[i] + f3[i] + f13)  # 101
    psi[i, 4] <- exp(f1[i]) # 100
    psi[i, 5] <- exp(f2[i] + f3[i] + f23)  # 011
    psi[i, 6] <- exp(f2[i])  # 010
    psi[i, 7] <- exp(f3[i])  # 001
    psi[i, 8] <- 1
  
    # latent occupancy state
    Z[i] ~ dcat(psi[i, 1:8])
    Z_sim[i] ~ dcat(psi[i, 1:8])
    
    # species-specific presence / absence
    z1[i] <- (Z[i] == 1) + (Z[i] == 2) + (Z[i] == 3) + (Z[i] == 4)
    z2[i] <- (Z[i] == 1) + (Z[i] == 2) + (Z[i] == 5) + (Z[i] == 6)
    z3[i] <- (Z[i] == 1) + (Z[i] == 3) + (Z[i] == 5) + (Z[i] == 7)
    
    z1_sim[i] <- (Z_sim[i] == 1) + (Z_sim[i] == 2) + (Z_sim[i] == 3) +
      (Z_sim[i] == 4)
    z2_sim[i] <- (Z_sim[i] == 1) + (Z_sim[i] == 2) + (Z_sim[i] == 5) +
      (Z_sim[i] == 6)
    z3_sim[i] <- (Z_sim[i] == 1) + (Z_sim[i] == 3) + (Z_sim[i] == 5) +
      (Z_sim[i] == 7)
      
    # marginal occupancy probabilities
    psi_s1[i] <- psi[i, 1] + psi[i, 2] + psi[i, 3] + psi[i, 4]
    psi_s2[i] <- psi[i, 1] + psi[i, 2] + psi[i, 5] + psi[i, 6]
    psi_s3[i] <- psi[i, 1] + psi[i, 3] + psi[i, 5] + psi[i, 7]
    
    for(j in 1:J){  # looping through all replicate surveys
    
      # conditional detection probability
      logit(p1[i, j]) <- inprod(a1[1:L], w[i, j, 1:L])
      logit(p2[i, j]) <- inprod(a2[1:L], w[i, j, 1:L])
      logit(p3[i, j]) <- inprod(a3[1:L], w[i, j, 1:L])
    
      # detection model
      y1[i, j] ~ dbern(p1[i, j] * z1[i])
      y2[i, j] ~ dbern(p2[i, j] * z2[i])
      y3[i, j] ~ dbern(p3[i, j] * z3[i])
      
      y1_sim[i, j] ~ dbern(p1[i, j] * z1_sim[i])
      y2_sim[i, j] ~ dbern(p2[i, j] * z2_sim[i])
      y3_sim[i, j] ~ dbern(p3[i, j] * z3_sim[i])
      
      # squared pearson residual
      chq_obs_1[i, j] <- (y1[i, j] - psi_s1[i] * p1[i, j]) ^ 2 /
        (psi_s1[i] * p1[i, j] * (1 - psi_s1[i] * p1[i, j]))
      chq_obs_2[i, j] <- (y2[i, j] - psi_s2[i] * p2[i, j]) ^ 2 /
        (psi_s2[i] * p2[i, j] * (1 - psi_s2[i] * p2[i, j]))
      chq_obs_3[i, j] <- (y3[i, j] - psi_s3[i] * p3[i, j]) ^ 2 /
        (psi_s3[i] * p3[i, j] * (1 - psi_s3[i] * p3[i, j]))
        
      chq_sim_1[i, j] <- (y1_sim[i, j] - psi_s1[i] * p1[i, j]) ^ 2 /
        (psi_s1[i] * p1[i, j] * (1 - psi_s1[i] * p1[i, j]))
      chq_sim_2[i, j] <- (y2_sim[i, j] - psi_s2[i] * p2[i, j]) ^ 2 /
        (psi_s2[i] * p2[i, j] * (1 - psi_s2[i] * p2[i, j]))
      chq_sim_3[i, j] <- (y3_sim[i, j] - psi_s3[i] * p3[i, j]) ^ 2 /
        (psi_s3[i] * p3[i, j] * (1 - psi_s3[i] * p3[i, j]))
    
    }
  
  }
  
  b_p1 <- step(sum(chq_obs_1) - sum(chq_sim_1))
  b_p2 <- step(sum(chq_obs_2) - sum(chq_sim_2))
  b_p3 <- step(sum(chq_obs_3) - sum(chq_sim_3))

}
    