<?php
include 'inc/connect.php';
include 'inc/fun/functions.php';
require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

if (isset($_GET['back']) && !empty($_GET['back'])) {
    $back = $_GET['back'];
} else {
    $back = '';
}

if ($back == "sql") {
    // استعراض الجداول في قاعدة البيانات
    $tables = $con->query('SHOW TABLES')->fetchAll(PDO::FETCH_COLUMN);
    // إنشاء تصدير لكل جدول
    $backup_file = 'backup_' . date('Y-m-d_H-i-s') . '.sql';
    $handle = fopen($backup_file, 'w');

    foreach ($tables as $table) {
        $result = $con->query('SELECT * FROM ' . $table);
        $rows = $result->fetchAll(PDO::FETCH_ASSOC);

        fwrite($handle, "DROP TABLE IF EXISTS $table;\n");

        $create_table_sql = $con->query("SHOW CREATE TABLE $table")->fetch(PDO::FETCH_ASSOC);
        fwrite($handle, $create_table_sql["Create Table"] . ";\n");

        foreach ($rows as $row) {
            $row = array_map('addslashes', $row);
            $row_values = implode(',', array_map(function($value) { return "'" . $value . "'"; }, $row));
            fwrite($handle, "INSERT INTO $table VALUES ($row_values);\n");
        }
    }

    fclose($handle);

    // تنزيل ملف النسخة الاحتياطية
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="' . basename($backup_file) . '"');
    readfile($backup_file);

    // حذف ملف النسخة الاحتياطية بعد تنزيله
    unlink($backup_file);
} elseif ($back == "xlsx") {
    // استعراض الجداول في قاعدة البيانات
$tables = $con->query('SHOW TABLES')->fetchAll(PDO::FETCH_COLUMN);
    
// إنشاء ملف Excel
$spreadsheet = new Spreadsheet();

foreach ($tables as $table) {
    // استعلام لاسترداد البيانات من الجدول الحالي
    $query = "SELECT * FROM $table";
    $statement = $con->prepare($query);
    $statement->execute();
    $data = $statement->fetchAll(PDO::FETCH_ASSOC);

    // إذا كانت هناك بيانات
    if (!empty($data)) {
        // إنشاء ورقة عمل جديدة لكل جدول
        $sheet = $spreadsheet->createSheet();
        $sheet->setTitle($table);

        // استخراج أسماء الأعمدة
        $columns = array_keys($data[0]);

        // إضافة أسماء الأعمدة إلى المصفوفة
        array_unshift($data, $columns);

        // كتابة البيانات في الورقة الحالية
        $sheet->fromArray($data, null, 'A1');
    }
}

    
    // حفظ ملف Excel
    $writer = new Xlsx($spreadsheet);
    $backup_file = 'backup_' . date('Y-m-d_H-i-s') . '.xlsx';
    $writer->save($backup_file);

    // تنزيل ملف النسخة الاحتياطية
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="' . basename($backup_file) . '"');
    readfile($backup_file);

    // حذف ملف النسخة الاحتياطية بعد تنزيله
    unlink($backup_file);
} else {
    ?>
    <a href="?back=sql"> تحميل SQL </a>
    <br>
    <a href="?back=xlsx"> تحميل اكسل </a>
    <?php
}