<?php

const LOG_PATH = '../log.txt';

header ('Content-Type: application/json; charset=UTF-8');

$log_data = [];

$page = (int) (filter_input (INPUT_POST, 'p') ?? 1);
$length = (int) (filter_input (INPUT_POST, 'max') ?? 20);
$asc = (int) (filter_input (INPUT_POST, 'asc') ?? 0) !== 0;
$keyword = trim (filter_input (INPUT_POST, 'q') ?? '');

$date_start = filter_input (INPUT_POST, 'start');
$date_end = filter_input (INPUT_POST, 'end');

$f = fopen (LOG_PATH, 'r');

if ($f !== false)
  {
    while (($dt = fgetcsv ($f, 0, "\t")) !== false)
      {
        $chat_info = json_decode ($dt[1]);

        $log_data[] = ['dateTime'     => $dt[0],
                       'chatIcon'     => $chat_info -> author -> imageUrl,
                       'chatName'     => htmlspecialchars ($chat_info -> author -> name),
                       'chatMessage'  => htmlspecialchars ($chat_info -> message),
                       'answer'       => htmlspecialchars ($dt[2])];
      }
  }

fclose ($f);

unset ($f);

if ($keyword !== '')
  {
    $log_data = array_filter ($log_data, fn ($row) => (
        strpos (($row['chatName'] . "\n" . $row['chatMessage'] . "\n"
                 . $row['answer']),
                $keyword)
        !== false));
  }

if ($date_start)
  {
    $log_data = array_filter ($log_data, fn ($row) => (
        substr ($row['dateTime'], 0, 10) >= $date_start));
  }

if ($date_end)
  {
    $log_data = array_filter ($log_data, fn ($row) => (
        substr ($row['dateTime'], 0, 10) <= $date_end));
  }

$pages_max = (int) ((count ($log_data) - 1) / $length) + 1;

if (!($asc))
  $log_data = array_reverse ($log_data);

$log_data = array_slice ($log_data, ($page - 1) * $length, $length, false);

echo ('{"data": ' . json_encode ($log_data) . ', "max": ' . $pages_max
      . ', "page": ' . $page . '}');