<?php

header("Access-Control-Allow-Origin: *");
header('Access-Control-Allow-Credentials: true');
header("Access-Control-Allow-Methods: PUT, GET, POST, DELETE");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
header("Content-Type: application/json; charset=UTF-8");

$postData = file_get_contents("php://input");
$postData = json_decode($postData, true);

$uname = $postData['file']['username'];
$filename = $postData['file']['filename'];
$language = $postData['file']['language'];
$input_data = $postData['input_data'];

$ret_stat = 0;

$template = strval(rand(1, 1000000));
$in_fname = "../users/" . $uname . "/" . "temp_in" . $template;

$file = fopen($in_fname, 'w');
file_put_contents($in_fname, $input_data);
fclose($file);

$out_fname = "../users/" . $uname . "/" . "temp_out" . $template;

if (strcmp($language, ".cpp") == 0) {
  system("./../users/" . $uname . "/" . $filename . " < " . $in_fname . " > " . $out_fname, $ret_stat);
} else if (strcmp($language, ".java") == 0) {
  system("java -cp ../users/" . $uname . "/ " . $filename . " < " . $in_fname . " > " . $out_fname, $ret_stat);
} else if (strcmp($language, ".py") == 0) {
  system("python3 ../users/" . $uname . "/" . $filename . ".py < " . $in_fname . " > " . $out_fname, $ret_stat);
}

if ($ret_stat != 0) {
  unlink($in_fname);
  unlink($out_fname);
  throw new Exception("Runtime Error!");
} else {
  $file = fopen($out_fname, 'r');
  if (filesize($out_fname) == 0) {
    echo json_encode('');
  } else {
    echo json_encode(fread($file, filesize($out_fname)));
  }
  fclose($file);
}

unlink($in_fname);
unlink($out_fname);

?>
