<?php

session_start();
ob_start();

require_once './config.php';
require_once './_pdo.php';

require_once './src/D2Functions.php';

error_reporting(E_ALL);
set_time_limit(-1);
ini_set('max_input_time', '-1');
ini_set('max_execution_time', '0');

define('DB_FILE', $_SESSION['modname'] . ".db");
try {
    PDO_Connect("sqlite:" . DB_FILE);
} catch (Exception $e) {
    echo "Connection error: " . $e->getMessage();
}


$cmd = $_REQUEST['cmd'];
$tableName = $_REQUEST['tableName'];

//function dumpAndProcessTable($tableName) {
//    // Set the path to the SQLite3 executable
//    $sqlitePath = "bin\sqlite3.exe";
//
//    // Dump the SQLite table to a TSV file
//    $tsvFile = $tableName . ".txt";
//    $dumpCommand = "bin\sqlite3.exe {$_SESSION['modname']}.db \"SELECT * FROM string\" -separator \"\t\" -cmd \".mode tabs\" -cmd \".headers off\" > \"{$_SESSION['tbl']}{$tsvFile}\"";
//    shell_exec($dumpCommand);
//
//    die();
//
//    // Convert TSV to TBL
//    // Run the executable with the TSV file as input
//    $executablePath = "bin\EnquettarM.exe";
//    $processCommand = "{$executablePath} -i \"{$_SESSION['tbl']}{$tsvFile}\"";
//
//    // will be saved into ModString.tbl
//
//    $etxt = 'ModString.txt';
//    $etbl = 'ModString.tbl';
//
//    shell_exec($processCommand);
//
//    // now file is generated in rootdir, etbl, which we need to move to session tbl 
//    rename($etbl, "{$_SESSION['tbl']}/$tableName.tbl");
//
//    // Remove the generated ModString.tbl
//    //unlink($etbl);
//}

if ($cmd == "getTable") {
    $filePath = "{$_SESSION['tbl']}/$tableName.tbl";
    $executablePath = getcwd() . "\bin\EnquettarM.exe";
    $processCommand = "{$executablePath} -e \"$filePath\"";
    shell_exec($processCommand);

    rename(getcwd() . "\ModString.txt", "{$_SESSION['tbl']}/$tableName.txt");

    $filePath = "{$_SESSION['tbl']}/$tableName.txt";

    $fileLines = file($filePath);

    $rows = [];
    $rowid = 1; // Starting rowid value

    foreach ($fileLines as $line) {
        $row = explode("\t", $line);
        $key = $row[0];
        $string = trim($row[1]);

        $rowData = [
            'rowid' => $rowid,
            'Key' => $key,
            'String' => $string
        ];

        $rows[] = $rowData;
        $rowid++;
    }


    // Start the table with Bootstrap classes
    $tableMarkup = '';

    // Iterate over the rows
    foreach ($rows as $row) {
        
        $row['String'] = str_replace('}', '&#10;', $row['String']);
        
        $tableMarkup .= "<tr class='row-{$row['rowid']}'>";

        $tableMarkup .= "<td style='width: 64px;'>{$row['rowid']}</td>";

        // Display the Key column as a text input with Bootstrap form-control class
        $tableMarkup .= "<td style='width: 20%;'><input type='text' value='{$row['Key']}' class='form-control'><span style='visibility: hidden;'>{$row['Key']}</span></td>";

        // Display the String column as a textarea with Bootstrap form-control class
        $tableMarkup .= "<td><textarea class='form-control'>{$row['String']}</textarea></td>";

        // Add the Update and Delete links within a single td element
        $tableMarkup .= "<td style='width: 100px;'><div>";

        // Add the Update link with Bootstrap btn and btn-primary classes
        $tableMarkup .= "<a href='#' class='update-link btn btn-primary' data-rowid='{$row['rowid']}'>Update</a>";

        // Add the Delete link with Bootstrap btn and btn-danger classes
        $tableMarkup .= "<a style='' href='#' class='delete-link btn btn-danger' data-rowid='{$row['rowid']}'>Delete</a>";

        $tableMarkup .= "</div></td>";

        $tableMarkup .= "</tr>";
    }

    // Return the table markup
    echo $tableMarkup;
}


if ($cmd == "update") {
       
    $string = str_replace('\n', '}', $_REQUEST['string']);
    
    
    $query = "UPDATE $tableName SET Key = ?, String = ? WHERE Key = ?";
    PDO_Execute($query, [$_REQUEST['key'], $string, $_REQUEST['key']]);

    // Update the corresponding row in the text file
    $filePath = "{$_SESSION['tbl']}/$tableName.txt";
    $fileLines = file($filePath);

    // Calculate the line number to update based on the rowid
    $lineNumber = $_REQUEST['rowid'];

    // Update the line in the file with the new key and string values
    $fileLines[$lineNumber - 1] = "{$_REQUEST['key']}\t{$string}\n";

    // Save the updated content back to the text file
    file_put_contents($filePath, implode("", array_filter($fileLines)));

    // Convert TXT to TBL
    $executablePath = "bin\EnquettarM.exe";
    $processCommand = "{$executablePath} -i \"{$_SESSION['tbl']}/$tableName.txt\"";

    shell_exec($processCommand);

    rename(getcwd() . "\ModString.tbl", "{$_SESSION['tbl']}/$tableName.tbl");
    
    // Remove empty lines from end of file
    // Read the file contents into an array of lines
    $lines = file($filePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

    // Trim empty lines from the end of the array
    while (!empty($lines) && trim(end($lines)) === '') {
        array_pop($lines);
    }

    // Write the updated content back to the file
    file_put_contents($filePath, implode(PHP_EOL, $lines));
}


if ($cmd == "delete") {
    $query = "DELETE FROM $tableName WHERE Key = ?";
    PDO_Execute($query, [$_REQUEST['key']]);
    $rowid = $_REQUEST['rowid'];
    $filePath = "{$_SESSION['tbl']}/$tableName.txt";
    // Calculate the line number to delete based on the rowid
    $lineNumber = $rowid - 1; // Assuming zero-indexed line numbers
    // Read the lines of the text file into an array
    $fileLines = file($filePath, FILE_IGNORE_NEW_LINES);

    // Remove the line at the specified line number
    if (isset($fileLines[$lineNumber])) {
        unset($fileLines[$lineNumber]);
    }

    // Save the updated content back to the text file
    file_put_contents($filePath, implode("\n", $fileLines));
    
    // Convert TXT to TBL
    $executablePath = "bin\EnquettarM.exe";
    $processCommand = "{$executablePath} -i \"{$_SESSION['tbl']}/$tableName.txt\"";

    shell_exec($processCommand);

    rename(getcwd() . "\ModString.tbl", "{$_SESSION['tbl']}/$tableName.tbl");    
    
    
    echo $_REQUEST['rowid'] . " deleted";
}

if ($cmd == "add") {
    $tableName = $_POST['tableName'];
    $key = $_POST['Key'];
    $string = $_POST['String'];

    // Create your insert statement using the provided values
    $query = "INSERT INTO $tableName (Key, String) VALUES (?, ?)";
    $params = array($key, $string);

    // Execute the insert statement
    $result = PDO_Execute($query, $params);

    // Retrieve the last inserted rowid from the table
    $query = "SELECT last_insert_rowid() AS rowid";
    $result = PDO_FetchOne($query);

    // Append the new row to the text file
    $newLine = "{$key}\t{$string}";
    file_put_contents($filePath, $newLine . PHP_EOL, FILE_APPEND);    
    
    echo $result;
    
    
    
    
    
}