<?php
// Set header for JSON output
header('Content-Type: application/json; charset=UTF-8');

// Function to parse date from dd-mm-yyyy format
function parseDate($dateStr) {
    $parts = explode('-', $dateStr);
    if (count($parts) === 3) {
        return DateTime::createFromFormat('d-m-Y', $dateStr);
    }
    return false;
}

// Function to read JSON files from directory
function getJsonFiles($directory) {
    $files = glob($directory . '/*.json');
    $dates = [];
    foreach ($files as $file) {
        $filename = basename($file);
        if (preg_match('/(\d{2}-\d{2}-\d{4})/', $filename, $matches)) {
            $dates[] = $matches[1];
        }
    }
    error_log("Found files: " . print_r($files, true));
    error_log("Extracted dates: " . print_r($dates, true));
    return array_unique($dates);
}

// Initialize variables
$date1 = isset($_GET['date1']) ? $_GET['date1'] : (isset($_POST['date1']) ? $_POST['date1'] : '');
$date2 = isset($_GET['date2']) ? $_GET['date2'] : (isset($_POST['date2']) ? $_POST['date2'] : '');
$multiplier = isset($_GET['multiplier']) ? floatval($_GET['multiplier']) : (isset($_POST['multiplier']) ? floatval($_POST['multiplier']) : 10);
$output = [
    'status' => 'error',
    'message' => '',
    'data' => [
        'stocks_in_date1' => 0,
        'stocks_in_date2' => 0,
        'stocks_invalid' => 0,
        'stocks_omitted' => 0,
        'stocks_included' => 0,
        'results' => []
    ]
];

// Log request details
error_log("GET data: " . print_r($_GET, true));
error_log("POST data: " . print_r($_POST, true));

// Get available dates from /data folder
$dates = getJsonFiles('./data');

// Process request (GET or POST)
if ((!empty($date1) && !empty($date2) && $multiplier > 0) && ($_SERVER['REQUEST_METHOD'] === 'GET' || $_SERVER['REQUEST_METHOD'] === 'POST')) {
    $date1Obj = parseDate($date1);
    $date2Obj = parseDate($date2);

    if (!$date1Obj || !$date2Obj) {
        $output['message'] = 'Invalid date format. Please use dd-mm-yyyy.';
        echo json_encode($output);
        exit;
    }

    if ($date1Obj > $date2Obj) {
        $output['message'] = 'Older date must be before newer date.';
        echo json_encode($output);
        exit;
    }

    // Find JSON files for the selected dates
    $date1Files = glob("./data/*{$date1}.json");
    $date2Files = glob("./data/*{$date2}.json");
    error_log("Date1 files for {$date1}: " . print_r($date1Files, true));
    error_log("Date2 files for {$date2}: " . print_r($date2Files, true));

    if (empty($date1Files) || empty($date2Files)) {
        $output['message'] = 'No data files found for one or both selected dates.';
        echo json_encode($output);
        exit;
    }

    $date1Data = [];
    $date2Data = [];
    $stocksDate1 = [];
    $stocksDate2 = [];
    $stocksInvalid = [];
    $stocksOmitted = [];
    $stocksIncluded = [];

    // Read and parse date1 files
    foreach ($date1Files as $file) {
        $json = file_get_contents($file);
        $data = json_decode($json, true);
        if (json_last_error() !== JSON_ERROR_NONE) {
            error_log("JSON error in file {$file}: " . json_last_error_msg());
            continue;
        }
        if (isset($data['results'])) {
            foreach ($data['results'] as $result) {
                if (isset($result['data'][0])) {
                    $key = "{$result['data'][0]['FH_SYMBOL']}-{$result['data'][0]['FH_STRIKE_PRICE']}-{$result['data'][0]['FH_OPTION_TYPE']}-{$result['data'][0]['FH_EXPIRY_DT']}";
                    $date1Data[$key] = $result['data'][0];
                    $stocksDate1[] = $key;
                }
            }
        }
    }

    // Read and parse date2 files
    foreach ($date2Files as $file) {
        $json = file_get_contents($file);
        $data = json_decode($json, true);
        if (json_last_error() !== JSON_ERROR_NONE) {
            error_log("JSON error in file {$file}: " . json_last_error_msg());
            continue;
        }
        if (isset($data['results'])) {
            foreach ($data['results'] as $result) {
                if (isset($result['data'][0])) {
                    $key = "{$result['data'][0]['FH_SYMBOL']}-{$result['data'][0]['FH_STRIKE_PRICE']}-{$result['data'][0]['FH_OPTION_TYPE']}-{$result['data'][0]['FH_EXPIRY_DT']}";
                    $date2Data[$key] = [
                        'data' => $result['data'][0],
                        'url' => $result['url'] ?? '#'
                    ];
                    $stocksDate2[] = $key;
                }
            }
        }
    }

    // Identify invalid stocks (not present in both files)
    $stocksInvalid = array_unique(array_merge(
        array_diff($stocksDate1, $stocksDate2),
        array_diff($stocksDate2, $stocksDate1)
    ));

    // Compare FH_CHANGE_IN_OI
    $results = [];
    foreach ($date2Data as $key => $item) {
        if (isset($date1Data[$key])) {
            $oi1 = $date1Data[$key]['FH_CHANGE_IN_OI'];
            $oi2 = $item['data']['FH_CHANGE_IN_OI'];
            
            // Track all common stocks
            if ($oi1 <= 0 || $oi2 <= 0) {
                $stocksOmitted[] = $key;
                continue;
            }

            $times = $oi2 / $oi1;
            if ($times >= $multiplier) {
                $stocksIncluded[] = $key;
                $results[] = [
                    'stock' => "{$item['data']['FH_SYMBOL']}-{$item['data']['FH_STRIKE_PRICE']}-{$item['data']['FH_OPTION_TYPE']} ({$item['data']['FH_EXPIRY_DT']})",
                    'multiplier_times' => number_format($times, 2) . 'x',
                    'high' => $item['data']['FH_TRADE_HIGH_PRICE'],
                    'low' => $item['data']['FH_TRADE_LOW_PRICE'],
                    'url' => $item['url']
                ];
            } else {
                $stocksOmitted[] = $key;
            }
        }
    }

    // Remove duplicates
    $stocksDate1 = array_unique($stocksDate1);
    $stocksDate2 = array_unique($stocksDate2);
    $stocksOmitted = array_unique($stocksOmitted);
    $stocksIncluded = array_unique($stocksIncluded);

    // Prepare output
    $output['status'] = 'success';
    $output['data'] = [
        'stocks_in_date1' => count($stocksDate1),
        'stocks_in_date2' => count($stocksDate2),
        'stocks_invalid' => count($stocksInvalid),
        'stocks_omitted' => count($stocksOmitted),
        'stocks_included' => count($stocksIncluded),
        'results' => $results
    ];

    if (empty($results)) {
        $output['message'] = "No stocks found with FH_CHANGE_IN_OI at least {$multiplier}x higher on {$date2} compared to {$date1}.";
    }
} else {
    $output['message'] = 'Invalid or missing request data. Please provide date1, date2, and multiplier via GET or POST.';
}

echo json_encode($output);
?>