library(RKorAPClient)
library(rCharts)

plotHighchart <- function(query = "Schlumpf",
                          years = c(2000:2010),
                          as.alternatives = length(query) > 1,
                          vc = "textType = /Zeit.*/ & availability!=QAO-NC-LOC:ids & pubDate in",
                          kco = new("KorAPConnection", verbose=T) ) {
  palette <- c("#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd", "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf")
  h1 <- Highcharts$new()
  df <-
    frequencyQuery(kco, query, paste(vc, years), as.alternatives=as.alternatives) %>%
    { if(! as.alternatives) ipm(.) else percent(.) } %>%
    mutate(year=as.numeric(queryStringToLabel(vc)))

  ylabel = if(as.alternatives) "%" else "ipm"
  for(q in query) {
    dat <- df[df$query==q,]
    h1$series(
      marker = list(radius = 2),
      name = q,
      data = toJSONArray(data.frame(x=dat$year,
                                    y = if (as.alternatives) dat$f else dat$ipm,
                                    percentage = dat$f ,
                                    count = dat$totalResults,
                                    click=dat$webUIRequestUrl), json = F),
      type = 'line',
      color = palette[1+length(h1$params$series)/2],
      zIndex = 1
    )
    h1$series(
      name = "ci",
      data = toJSONArray2(dat[,c('year', 'conf.low', 'conf.high')], names = F, json = F),
      type = 'arearange',
      fillOpacity = 0.3,
      lineWidth = 0,
      marker = list(enabled = F),
      enableMouseTracking = F,
      linkedTo= ':previous',
      color = palette[1+(length(h1$params$series)-1)/2],
      zIndex = 0
    )
  }
  h1$plotOptions(line = list(cursor = 'pointer', point = list(
    events = list(click = "#! function() { window.open(this.click, 'korap'); } !#")
  )))
  h1$set(
    credits = list(text="KorAP R Client Pakckage", href="//github.com/KorAP/RKorAPClient/"),
    zoomType = "Y",
#    xAxis = list(title = list(text="year")),
    yAxis = if (as.alternatives)
      list(ceiling=100, floor=0, labels = list(format="{value}\U2009%"))
    else
      list(title = list(text=ylabel), floor=0),
    tooltip = list(
      formatter = paste0("#! function (tooltip) {
        var str = tooltip.defaultFormatter.call(this, tooltip);
        if(Array.isArray(str))  {
          str = str.join('');
        }
        for (var i = 0; i < this.points.length; i++) {
            str = str.replace(/([0-9.,]+.?)", ylabel, "/, this.points[i].point.count+' ($1@)');
        }
        return str.replace(/@/g, '", ylabel, "')
      } !#"),
      crosshairs =  T,
      valueDecimals = 2,
      shared = T,
      valueSuffix = paste0('\U2009', ylabel)
    )
  )
  print(h1)
  h1
}

saveHPlot <- function(h, fname, local = F) {
  capture.output(h$show('inline', include_assets = TRUE, cdn = TRUE)) %>%
  paste(collapse = '\n') %>%
  { if (local)  gsub("=//", "=https://", .) else . } %>%
  cat(file=fname)
}

#h1 <-plotHighchart(c("macht []{0,3} Sinn", "ergibt []{0,3} Sinn"), c(1980:2018))
h1 <- plotHighchart(c("Leser | Lesern | Lesers", 'Leserin | Leserinnen', 'LeserIn | LeserInnen', '"Leser[_\\*]in.*"'), c(1985:2018))
#plotHighchart(c("Tollpatsch", "Tolpatsch"), c(1991:2018))

