<?php

include('includes/config/config.php');
include('includes/functions.php');
include('log_entry.php');

header('Content-Type: application/json');
$ohc_type = $_SESSION['current_ohcttype'];

function processData($conn, $checkupFormKey, $ruleResult, $ruleEquationLike)
{
    $dataQuery = "
        SELECT 
            cfkv.id,
            cfkv.checkup_form_id,
            cfkv.checkup_form_key,
            cfkv.checkup_form_value,
            ct.checkup_date,
            ct.checkup_type_id,
            ctype.checkup_type_name,
            pm.dept_id,
            d.dept_name
        FROM 
            checkup_form_key_value cfkv
        JOIN 
            checkup_form ct ON cfkv.checkup_form_id = ct.checkup_id
        JOIN 
            checkup_type ctype ON ct.checkup_type_id = ctype.checkup_type_id
        JOIN 
            patient_master pm ON ct.emp_id = pm.id
        JOIN 
            department d ON pm.dept_id = d.dept_id
        JOIN 
            checkup_parameter cp ON cfkv.checkup_form_key = cp.column_name
        WHERE 
            ctype.checkup_type_name = 'Annual Medical Examination' 
            AND cp.key_health_map_name = (
                SELECT key_param_id 
                FROM key_health_reportable_parameter_master 
                WHERE key_param_name = '$checkupFormKey'
            )";

    error_log('sql:' . $dataQuery);
    $dataResult = $conn->query($dataQuery);

    if (!$dataResult) {
        error_log('Data Query Error: ' . $conn->error);
        return ['error' => 'Data query failed.'];
    }

    $data = $dataResult->fetch_all(MYSQLI_ASSOC);

    $rulesQuery = "
        SELECT * FROM rule_equation
        WHERE result IN ('$ruleResult')
            AND rule_equation LIKE '%$ruleEquationLike%';
    ";
    error_log('rule:' . $rulesQuery);
    $rulesResult = $conn->query($rulesQuery);
    $rules = $rulesResult->fetch_all(MYSQLI_ASSOC);

    $abnormalityQuery = "SELECT abnormality_id, abnormality_name FROM abnormality";
    $abnormalityResult = $conn->query($abnormalityQuery);

    $abnormalityTypes = [];
    while ($row = $abnormalityResult->fetch_assoc()) {
        $abnormalityTypes[$row['abnormality_id']] = $row['abnormality_name'];
    }

    $abnormalityCounts = array_fill_keys(array_values($abnormalityTypes), 0);
    $results = [];

    foreach ($data as $row) {
        $checkup_value = $row['checkup_form_value'];
        error_log('Processing value: ' . $checkup_value);

        $matched = false;

        foreach ($rules as $rule) {
            $rule_equation = str_replace($checkupFormKey, $checkup_value, $rule['rule_equation']);
            error_log('Evaluating rule equation: ' . $rule_equation);
            $isValid = false;
            try {
                $isValid = eval('return ' . $rule_equation . ';');
            } catch (ParseError $e) {
                error_log('ParseError in rule evaluation: ' . $e->getMessage());
            }

            if ($isValid) {
                error_log('Is valid: true');
                $matched = true;
                $abnormality_id = $rule['abnormality'];
                $abnormalityName = $abnormalityTypes[$abnormality_id] ?? 'Unknown';

                if (isset($abnormalityCounts[$abnormalityName])) {
                    $abnormalityCounts[$abnormalityName]++;
                }

                $results[] = [
                    'checkup_form_id' => $row['checkup_form_id'],
                    'checkup_form_key' => $row['checkup_form_key'],
                    'checkup_form_value' => $row['checkup_form_value'],
                    'checkup_date' => $row['checkup_date'],
                    'abnormality_name' => $abnormalityName,
                    'dept_name' => $row['dept_name']
                ];
                break;
            } else {
                error_log('Is valid: false');
            }
        }


        if (!$matched) {
            $abnormalityCounts['Normal']++;
            $results[] = [
                'checkup_form_id' => $row['checkup_form_id'],
                'checkup_form_key' => $row['checkup_form_key'],
                'checkup_form_value' => $row['checkup_form_value'],
                'checkup_date' => $row['checkup_date'],
                'abnormality_name' => 'Normal',
                'dept_name' => $row['dept_name']
            ];
        }
    }

    $filteredCounts = [
        'Mild' => $abnormalityCounts['Mild'] ?? 0,
        'Moderate' => $abnormalityCounts['Moderate'] ?? 0,
        'Severe' => $abnormalityCounts['Severe'] ?? 0,
        'Normal' => $abnormalityCounts['Normal'] ?? 0
    ];

    return [
        'abnormality_counts' => $filteredCounts
    ];
}



$ppbsResults =
    processData($conn, 'ppbs', '397', 'ppbs');


$response = [
    'PPBS' => $ppbsResults,

];

echo json_encode($response);

$conn->close();