<?php
require_once('Parsedown.php');
if(file_exists('config.php')) {
  require_once('config.php');
} else {
  require_once('config.example.php');
}

$func = $_GET['f'];
switch($func) {
case 'build': // Build the worship.html page
  buildStaticPage();
  break;
default:
  showAdminPage();
  break;
}

function buildStaticPage() {
  $pd = new Parsedown();
  $title = !empty($_POST['title'])?$_POST['title']:TITLE;
  $out = getHTMLHeader($title);
  $selFiles = json_decode($_POST['chosen_files']);
  foreach($selFiles as $file) {
    if(file_exists($file)) {
      $md = file_get_contents($file);
      $out .= '<div class="afile">';
      $out .= $pd->text($md);
      $out .= "</div>";
    }
  }
  $out .= getHTMLFooter();
  $outfile = !empty($_POST['outfile'])?$_POST['outfile']:DEFAULT_FILE;
  file_put_contents($outfile, $out);
  header('Location: '.$outfile);
}

function showAdminPage() {
  $out = getHTMLHeader(TITLE)
       .'<form class="pure-form" action="/manager/?f=build" method="POST">'."\n"
       .'  <fieldset>'."\n"
       .'    <input id="chosen_files" name="chosen_files" value="" type="hidden" />'."\n"
       .'    <div class="margin10">'."\n"
       .'      <button class="pure-button pure-button-primary" type="submit">Build File</button>'."\n"
       .'    </div>'."\n"
       .'    <div class="margin10">'."\n"
       .'      <label for="filter">Filter</label>'."\n"
       .'      <input onkeyup="updateFilter(this.value);" name="filter" value="" placeholder="Filter Files" />'."\n"
       .'      <table>'."\n"
       .'        <tbody>'."\n";
  foreach(glob(MD_DIR.'/*.md') as $file) {
    $base = basename($file, '.md');
    $out.='        <tr data-file="'.$base.'">'."\n"
         .'          <td>'.$base.'</td>'
         .'<td><a class="pure-button pure-button-secondary" onclick="javascript:toggleFile(this, \''.$file.'\');">Add</a></td>'."\n"
         .'        </tr>'."\n";
  }
  $out.='        </tbody>'."\n"
       .'      </table>'."\n"
       .'    </div>'."\n"
       .'  </fieldset>'."\n"
       .'</form>'."\n"
       .'<script>'."\n"
       .'var selectedFiles = [];'."\n"
       .'var tablerows = document.getElementsByTagName("tr");'."\n"
       .'function updateFilter(flt) {'."\n"
       .'  flt = flt.toLowerCase();'."\n"
       .'  for(var i = 0; i < tablerows.length; i++) {'."\n"
       .'    if(tablerows[i].dataset.file.toLowerCase().startsWith(flt)) {'."\n"
       .'      tablerows[i].classList.remove("hidden");'."\n"
       .'    } else {'."\n"
       .'      tablerows[i].classList.add("hidden");'."\n"
       .'    }'."\n"
       .'  }'."\n"
       .'}'."\n"

       .'function toggleFile(btn, sng) {'."\n"
       .'  if(!btn.classList.contains("pure-button-warning")) {'."\n"
       .'    btn.classList.remove("pure-button-secondary");'."\n"
       .'    btn.classList.add("pure-button-warning");'."\n"
       .'    for(var i = 0; i < selectedFiles.length; i++) {'."\n"
       .'      if(selectedFiles[i] == sng) { return; }'."\n"
       .'    }'."\n"
       .'    selectedFiles.push(sng);'."\n"
       .'    btn.innerText = "Remove";'."\n"
       .'  } else {'."\n"
       .'    btn.classList.remove("pure-button-warning");'."\n"
       .'    btn.classList.add("pure-button-secondary");'."\n"
       .'    for(var i = 0; i < selectedFiles.length; i++) {'."\n"
       .'      if(selectedFiles[i] == sng) { delete selectedFiles[i]; }'."\n"
       .'    }'."\n"
       .'    btn.innerText = "Add";'."\n"
       .'  }'."\n"
       .'  updateFilesInput();'."\n"
       .'}'."\n"

       .'function removeSong(sng) {'."\n"
       .'  for(var i = 0; i < selectedFiles.length; i++) {'."\n"
       .'    if(selectedFiles[i] == sng) { delete selectedFiles[i]; }'."\n"
       .'  }'."\n"
       .'  updateFilesInput();'."\n"
       .'}'."\n"

       .'function updateFilesInput() {'."\n"
       .'  var out = "[";'."\n"
       .'  for(var i = 0; i < selectedFiles.length; i++) {'."\n"
       .'    out+="\""+selectedFiles[i]+"\","'."\n"
       .'  }'."\n"
       .'  out = out.substring(0,out.length-1)+"]"'."\n"
       .'  document.getElementById("chosen_files").value = out;'."\n"
       .'}'."\n"
       .'</script>'."\n"
       .getHTMLFooter();
  echo $out;
}

function getHTMLHeader($title = TITLE) {
  $out = '<!DOCTYPE html>'."\n"
        .'<html lang="en">'."\n"
        .'  <head>'."\n"
        .'    <title>'.$title.'</title>'."\n"
        .'    <link rel="stylesheet" href="https://unpkg.com/purecss@1.0.0/build/pure-min.css" integrity="sha384-nn4HPE8lTHyVtfCBi5yW9d20FjT8BJwUXyWZT9InLYax14RDjBj46LmSztkmNP9w" crossorigin="anonymous">'."\n"
        .'    <style type="text/css">'."\n"
        .'    body { margin: 20px; }'."\n"
        .'    td {'."\n"
        .'      padding-top: 2px;'."\n"
        .'      padding-bottom: 3px;'."\n"
        .'    }'."\n"
        .'    .margin10 {'."\n"
        .'      margin: 10px;'."\n"
        .'    }'."\n"
        .'    .pure-button-secondary {'."\n"
        .'      background-color: #0A0;'."\n"
        .'      color: #FFF;'."\n"
        .'    }'."\n"
        .'    .pure-button-warning {'."\n"
        .'      background-color: #A00;'."\n"
        .'      color: #FFF;'."\n"
        .'    }'."\n"
        .'    </style>'."\n"
        .' </head>'."\n"
        .' <body>'."\n";
  return $out;
}

function getHTMLFooter() {
  $out = '  </body>'."\n"
        .'</html>'."\n";
  return $out;
}

?>