<?php

ini_set('session.cookie_samesite', 'None');
ini_set('session.cookie_secure', '1');

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
   session_start();
    session_unset();
    session_destroy();

    session_start();
    session_regenerate_id(true);
} else {
    session_start();
}


// Create a session directory if it doesn't exist
$sessionDir = __DIR__ . '/sessions/' . session_id();
$sessionPath = 'sessions/' . session_id();
//echo "session $sessionDir ";
//echo "path $sessionPath ";
if (!mkdir($sessionDir, 0777, true)){
	die('Failed to create directory ');
}

// Function to map initials to codons and amino acids
function mapInitialsToCodonsAndAminoAcids($initials) {
    $codonMap = [
        'A' => ['GCT', 'ALA'], 'B' => ['GCA', 'ALA'], 'C' => ['TGC', 'CYS'], 'D' => ['GAT', 'ASP'],
        'E' => ['GAG', 'GLU'], 'F' => ['TTT', 'PHE'], 'G' => ['GGG', 'GLY'], 'H' => ['CAT', 'HIS'],
        'I' => ['ATA', 'ILE'], 'J' => ['ATC', 'ILE'], 'K' => ['AAG', 'LYS'], 'L' => ['CTC', 'LEU'],
        'M' => ['ATG', 'MET'], 'N' => ['GAC', 'ASN'], 'O' => ['GAT', 'ASN'], 'P' => ['CCC', 'PRO'],
        'Q' => ['GAG', 'GLN'], 'R' => ['CGT', 'ARG'], 'S' => ['TCA', 'SER'], 'T' => ['ACT', 'THR'],
        'U' => ['ACG', 'THR'], 'V' => ['GTC', 'VAL'], 'W' => ['TGG', 'TRP'], 'X' => ['GTA', 'VAL'],
        'Y' => ['TAC', 'TYR'], 'Z' => ['TAT', 'TYR']
    ];

    $codons = [];
    $aminoAcids = [];

    foreach ($initials as $letter) {
        $letter = strtoupper($letter);
        if (isset($codonMap[$letter])) {
            $codons[] = $codonMap[$letter][0];
            $aminoAcids[] = $codonMap[$letter][1];
        } else {
            $codons[] = '---';
            $aminoAcids[] = 'Unknown';
        }
    }
    return [$codons, $aminoAcids];
}

// Variables for later display
$displayCodons = [];
$displayAminoAcids = [];
$codonVerticalText = '';

$initials = isset($_POST['initials']) ? implode('', $_POST['initials']) : '';
if (!empty($initials)) {
    // Map initials
    list($codons, $aminoAcids) = mapInitialsToCodonsAndAminoAcids(str_split($initials));
    
    // Save codons vertically (each letter per line)
    foreach ($codons as $codon) {
        $codonVerticalText .= implode("\n", str_split($codon)) . "\n";
    }
    file_put_contents("$sessionDir/codons.txt", $codonVerticalText);

    // Save amino acids list
    file_put_contents("$sessionDir/amino_acids.txt", implode(" ", $aminoAcids));

    // Set display variables
    $displayCodons = $codons;
    $displayAminoAcids = $aminoAcids;

$escapedSessionDir = escapeshellarg($sessionDir);
$command = "tcsh utils/mk-dna.tcsh $escapedSessionDir > $escapedSessionDir/dna_output.log 2>&1 &";
shell_exec($command);
$command2 = "tcsh utils/mk-pep.tcsh $escapedSessionDir > $escapedSessionDir/pep_output.log 2>&1 &";
shell_exec($command2);
$dnaprmFile = "$sessionDir/bdna.parm7";  // AMBER parm7 file
$dnapdbFile = "$sessionDir/bdna.pdb";  // AMBER parm7 file
$dnancFile = "$sessionDir/dna.crd";    // mdcrd file
$pepprmFile = "$sessionDir/pep.parm7";  // AMBER parm7 file
$peppdbFile = "$sessionDir/pep.pdb";  // AMBER parm7 file
$pepncFile = "$sessionDir/pep.crd";    // mdcrdfile
}
?>


<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <title>Central Dogma of Biology</title>
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <style>
    body {
      font-family: Arial, sans-serif;
      background-color: #f4f6f8;
      color: #333;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      padding: 40px;
    }
    h1 {
      font-size: 2.5em;
      background-color: #3498db;
      color: white;
      padding: 20px 30px;
      border-radius: 10px;
      box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
      margin-bottom: 30px;
    }
    input {
      padding: 10px;
      margin: 5px;
      width: 50px;
      text-align: center;
      font-size: 1em;
      border: 2px solid #ccc;
      border-radius: 5px;
    }
    button {
      margin-top: 10px;
      padding: 10px 20px;
      font-size: 1em;
      background-color: #2ecc71;
      color: white;
      border: none;
      border-radius: 5px;
      cursor: pointer;
    }
    button:hover {
      background-color: #27ae60;
    }
    .results {
      margin-top: 30px;
      text-align: center;
    }
    .results p {
      font-size: 1.2em;
    }
    .results ul {
      list-style: none;
      padding: 0;
    }
    .results ul li {
      margin: 5px 0;
    }
#menu ul{
  list-style: none;
}
    #menu li{
  display: inline;
}
  </style>
<!-- Load jQuery first -->
<script src="../jmol/jmol-16.3.7/jsmol/jquery/jquery-3.7.1.min.js"></script> 

<!-- Then load JSmol -->
<script type="text/javascript" src="../jmol/jmol-16.3.7/jsmol/JSmol.min.js"></script>

<!-- THEN use jQuery and JSmol -->
<script type="text/javascript">

  var JmolInfo = {
        width:400,
        height:400,
        color:"white",
        j2sPath: "../jmol/jmol-16.3.7/jsmol/j2s",
        use:"html5"
  };


  $(document).ready(function() {
  });
</script>


</head>

<body>
  <h1>Central Dogma of Biology</h1>
  <a href="https://dna.engr.latech.edu/codon-demo/CodonActivityPoster.png">Please Explain</a>  
  <h2>Enter 3 Initials Below </h2>

  <form method="POST">
    <div>
      <input maxlength="1" name="initials[]" placeholder="#1" />
      <input maxlength="1" name="initials[]" placeholder="#2" />
      <input maxlength="1" name="initials[]" placeholder="#3" />
    <button type="submit">GO!</button>
    </div>
  </form>
<table>
<td>
  <div id="menu" class="results">
    <h2>Gene:</h2>
    <ul>
      <?php foreach ($displayCodons as $codon): ?>
        <li><?= htmlspecialchars($codon) ?></li>
      <?php endforeach; ?>
    </ul>
<!-- LOAD DNA JMOL -->

<script type="text/javascript">
var scr00 = 'zap; set echo middle center; echo loading data...; refresh; '
var txdnacrd = 'load trajectory "<?= $sessionPath ?>/bdna.parm7" coord {0,-1,1} "mdcrd::<?= $sessionPath ?>/dna.crd"; spin on ; '
  Jmol.getApplet("DNAJmol", JmolInfo);
  Jmol.script(DNAJmol, "set echo middle center;  echo Jmol is ready;");
  Jmol.jmolButton(DNAJmol, scr00+txdnacrd, 'Load');
  Jmol.jmolButton(DNAJmol, 'anim mode palindrome 0.1 0.1; anim on', 'Dyn');
  document.write("Spin");
  Jmol.jmolButton(DNAJmol, 'spin on', 'on');
  Jmol.jmolButton(DNAJmol, 'spin off', 'off');
</script>
   </div>
</td>
<td>
  <div id="menu" class="results">
    <h2>Peptide:</h2>
    <ul>
      <?php foreach ($displayAminoAcids as $acid): ?>
        <li><?= htmlspecialchars($acid) ?></li>
      <?php endforeach; ?>
    </ul>
<!-- LOAD PEP JMOL -->
<script type="text/javascript">

var txpepcrd = 'load trajectory "<?= $sessionPath ?>/pep.parm7"  coord {0,-1,1} "mdcrd::<?= $sessionPath ?>/pep.crd"; spin on ; '
  Jmol.getApplet("PEPJmol", JmolInfo);
  Jmol.script(PEPJmol, "set echo middle center; echo Jmol is ready;");
  Jmol.jmolButton(PEPJmol, scr00+txpepcrd, 'Load');
  Jmol.jmolButton(PEPJmol, 'anim mode palindrome 0.1 0.1; anim on', 'Dyn');
  document.write("Spin");
  Jmol.jmolButton(PEPJmol, 'spin on', 'on');
  Jmol.jmolButton(PEPJmol, 'spin off', 'off');
</script>
   </div>
</td>
</table>

</body>
</html>
