<?php
header('Content-Type: application/json');
require_once('../libs/classes/DbPathsArray.php');
require_once('../libs/classes/App_DB.php');

$db = new App_DB(DBU::$dba_user);

$response = [
    'success' => false,
    'message' => ''
];

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $data = json_decode(file_get_contents('php://input'), true);

    if (!$data) {
        $response['message'] = 'غلط ڈیٹا فارمیٹ';
        echo json_encode($response);
        exit;
    }

    $darja = $data['darja'] ?? '';
    $subjectSno = $data['subjectSno'] ?? '';
    $promotionDate = $data['promotionDate'] ?? '';
    $dateEnd = $data['dateEnd'] ?? '';
    $resultTerm = $data['resultTerm'] ?? '';
    $eduRemarks = $data['edu_year_remarks'] ?? '';
    $marksArray = $data['marks'] ?? []; // Array of {stdSno: xxx, obtMarks: xxx}

    if (empty($darja) || empty($subjectSno) || empty($promotionDate) || empty($dateEnd) || empty($resultTerm) || empty($marksArray)) {
        $response['message'] = 'تمام ضروری معلومات فراہم کریں';
        echo json_encode($response);
        exit;
    }

    try {
        $db->beginTransactions();

        $sqlCheck = "SELECT sno FROM result 
                    WHERE darjasno = :darja 
                      AND stdSno = :stdSno 
                      AND subjectsno = :subSno 
                      AND promotionDate = :pDate 
                      AND dateEnd = :dEnd 
                      AND resultTerm = :term";

        $sqlInsert = "INSERT INTO result (darjasno, stdSno, subjectsno, obtmarks, promotionDate, dateEnd, resultTerm, edu_year_remarks) 
                      VALUES (:darja, :stdSno, :subSno, :marks, :pDate, :dEnd, :term, :rem)";

        $savedCount = 0;
        $skippedCount = 0;
        $existingStudents = [];

        foreach ($marksArray as $entry) {
            $stdSno = $entry['stdSno'];
            $obtMarks = (float)$entry['obtMarks'];

            // Individual duplicate check using getValueTrans (returns sno or false)
            $existingSno = $db->getValueTrans($sqlCheck, [
                'darja' => $darja,
                'stdSno' => $stdSno,
                'subSno' => $subjectSno,
                'pDate' => $promotionDate,
                'dEnd' => $dateEnd,
                'term' => $resultTerm
            ]);

            if (!$existingSno) {
                $db->dbQueryTrans($sqlInsert, [
                    'darja' => $darja,
                    'stdSno' => $stdSno,
                    'subSno' => $subjectSno,
                    'marks' => $obtMarks,
                    'pDate' => $promotionDate,
                    'dEnd' => $dateEnd,
                    'term' => $resultTerm,
                    'rem' => $eduRemarks
                ]);
                $savedCount++;
            } else {
                $skippedCount++;
            }
        }

        if ($savedCount === 0 && $skippedCount > 0) {
            $db->rollBackTransaction();
            $response['success'] = false;
            $response['message'] = 'ان طلباء کا اس مضمون کا نتیجہ پہلے ہی سے موجود ہے۔';
        } else {
            $db->commitTransaction();
            $response['success'] = true;
            if ($skippedCount > 0) {
                $response['message'] = "$savedCount طلباء کا نتیجہ محفوظ ہو گیا، جبکہ $skippedCount کا پہلے سے موجود ہونے کی وجہ سے چھوڑ دیا گیا۔";
            } else {
                $response['message'] = 'نتیجہ کامیابی کے ساتھ محفوظ ہو گیا';
            }
        }

    } catch (Exception $e) {
        $db->rollBackTransaction();
        $response['message'] = 'ڈیٹابیس کی خرابی: ' . $e->getMessage();
    }
}

echo json_encode($response);
