<?php
$FILENAME = '../private/bookings.csv';

// Success and error messages
$responses = [
  'bot' => ['danger' => 'bip, bap, booop'],
  'required' => ['danger' => 'Todos los campos son requeridos'],
  'email' => ['danger' => 'Email inválido'],
  'ip_flood' => [
    'danger' => 'Hay demasiada gente registrada desde esta IP, lo siento '.
      'pero es suficiente. ¿Problemas? <a href="./contacto">contáctanos</a>'
  ],
  'dupe_mail' => [
    'danger' => 'Este correo ya está registrado. ¿Problemas? '.
      '<a href="./contacto">contáctanos</a>'
  ],
  'success' => [
    'success' => '<strong>¡Has reservado un cupo exitosamente!</strong>. '.
      'Si por cualquier motivo no puedes asistir, recuerda anular tu '.
      'reserva (al fondo de esta página) para liberar tu cupo. ¡Nos vemos!'
  ]
];

if (file_exists($FILENAME)) {
  $fp = fopen($FILENAME, 'r+');
  fgetcsv($fp); // Jump over first line
} else {
  $fp = fopen($FILENAME, 'w');
  fputcsv($fp, ['ip', 'name', 'email', 'mailing', 'reserves', 'aborts']);
}

/**
 * Validation */

// Anti-spam
if ($_POST['message'])
  $response = $responses['bot'];

// Required fields
foreach (['name', 'email', 'reserves'] as $field) {
  if (!isset($response) && empty($_POST[$field])) {
    $response = $responses['required'];
    break;
  }
}

// Valid email
if (!isset($response) && !strpos($_POST['email'], '@'))
  $response = $responses['email'];

if (!isset($response)) {
  $dupe_ips = 0;
  while (($line = fgetcsv($fp)) !== false) {
    // Anti-flood
    if ($line[0] === $_SERVER['REMOTE_ADDR'])
      $dupe_ips++;
    
    // No mail dupes
    if ($line[2] === strtolower($_POST['email']))
      $dupe_mail = true;
  };

  if ($dupe_ips > 2)
    $response = $responses['ip_flood'];
  else if (isset($dupe_mail))
    $response = $responses['dupe_mail'];
}

/**
 * Write file */

// All good, let's write it
if (!isset($response)) {
  fputcsv(
    $fp,
    [
      $_SERVER['REMOTE_ADDR'],
      $_POST['name'],
      strtolower($_POST['email']),
      (!empty($_POST['mailing']) ? 'y' : 'n'),
      implode(' ', $_POST['reserves']),
      'n'
    ]
  );
  $response = $responses['success'];
}

fclose($fp);

/**
 * Response */

// If using AJAX return a direct JSON response, else save response in SESSION
if (isset($_POST['fetch'])) {
  print json_encode($response);
} else {
  session_start();
  $_SESSION['response'] = json_encode($response);
  header('Location: ./');
}
