library(mfdb)
# source("mfdb-paper-examples.R", echo = TRUE, max.deparse.length = 1000000)
# mfdb('mfdb-examples', destroy_schema = TRUE)
if (exists("mdb")) mfdb_disconnect(mdb)
mdb <- mfdb('mfdb-examples')

mfdb_import_sampling_type(mdb, data.frame(name=c('IGFS'), stringsAsFactors = FALSE))
mfdb_import_area(mdb, data.frame(name=c('A0A1', 'A0A2', 'A0A3', 'A0A4'), stringsAsFactors = FALSE))
mfdb_import_division(mdb, list(
    A0A1 = 'A0A1',
    A0A2 = 'A0A2',
    A0A3 = 'A0A3',
    A0A4 = 'A0A4',
    all = c('A0A1', 'A0A2', 'A0A3', 'A0A4')))

data_in <- read.table(header = TRUE, stringsAsFactors = FALSE, text = "
year month age length count
2000    1   1    10      8
2000    1   1    20      7

2000    1   2    20      6
2000    1   2    30      5

2000    1   3    30      4
2000    1   3    40      3

2000    1   4    50      2
2000    1   4    60      1

2000    1   5    90      4
")
data_in$areacell <- 'A0A1'
data_in$species <- 'COD'
data_in$sampling_type <- 'IGFS'
mfdb_import_survey(mdb, data_in, data_source = 'cod-2000')

mfdb_sample_count(mdb, c('age', 'length'), list(
    age = mfdb_group(imm = 1:3, mat = 4:5),
    length = mfdb_step_interval("len", by = 20, to = 100)))

mfdb_sample_count(mdb, c('length'), list(
    age = c(1,2,3),
    length = mfdb_step_interval("len", by = 20, to = 100)))

logging::setLevel('FINEST')
mfdb_sample_count(mdb, c('length'), list(
    age = mfdb_group(imm = 1:3, mat = 4:5),
    length = mfdb_step_interval("len", by = 20, to = 100)))
logging::basicConfig()

aggdata <- mfdb_sample_count(mdb, c('age', 'length'), list(
    age = mfdb_unaggregated(),
    length = mfdb_step_interval("len", by = 20, to = 100)))
gadget_dir_write(
    gadget_directory('model_output'),
    gadget_likelihood_component("catchdistribution",
        name = "ldist",
        weight = 1,
        data = aggdata[[1]]))

writeLines(readLines("model_output/likelihood"))
writeLines(readLines("model_output/Data/catchdistribution.ldist.sumofsquares"))
writeLines(readLines("model_output/Aggfiles/catchdistribution.ldist.len.agg"))
writeLines(readLines("model_output/Aggfiles/catchdistribution.ldist.age.agg"))

#### Bootstrap sampling

# Create extra data for areas

data_in2 <- data_in
data_in2$areacell <- 'A0A2'
data_in2$count <- data_in$count * 2
mfdb_import_survey(mdb, data_in2, data_source = 'cod-2000-A0A2')
data_in3 <- data_in
data_in3$areacell <- 'A0A3'
data_in2$count <- data_in$count * 3
mfdb_import_survey(mdb, data_in3, data_source = 'cod-2000-A0A3')
data_in4 <- data_in
data_in4$areacell <- 'A0A4'
data_in2$count <- data_in$count * 4
mfdb_import_survey(mdb, data_in4, data_source = 'cod-2000-A0A4')

aggdata <- mfdb_sample_count(mdb, c('area'), list(
    area = mfdb_group(A0234 = c('A0A2', 'A0A3', 'A0A4'))))
aggdata

aggdata <- mfdb_sample_count(mdb, c(), list(
    area = mfdb_bootstrap_group(5, mfdb_group(A0234 = c('A0A1', 'A0A2', 'A0A3', 'A0A4')), seed = 4)))
aggdata
lapply(aggdata, function (a) attr(a, 'area'))

logging::setLevel('FINEST')
mfdb_sample_count(mdb, c(), list(
    area = mfdb_bootstrap_group(2, mfdb_group(A0234 = c('A0A1', 'A0A2', 'A0A3', 'A0A4')), seed = 99)))
logging::basicConfig()
