<?php
require_once('includes/load.php');
page_require_level(3);

// Fungsi untuk menghitung forecast menggunakan weighted average dari 2 bulan
function calculate_forecast_next_3_month($sales_data) {
    $total_sales = 0;
    $total_weight = 0;
    $weights = [2, 1]; // Bobot untuk masing-masing bulan (bulan terbaru mendapat bobot lebih besar)

    foreach ($sales_data as $index => $sale) {
        $total_sales += $sale['total_qty'] * $weights[$index];
        $total_weight += $weights[$index];
    }

    // Menghitung rata-rata berbobot (weighted average)
    $weighted_average = $total_sales / $total_weight;

    // Proyeksi untuk 3 bulan ke depan berdasarkan rata-rata berbobot
    $forecast = [];
    for ($i = 1; $i <= 3; $i++) {
        $forecast[] = $weighted_average;
    }

    return $forecast;
}

// Mendapatkan bulan dan tahun saat ini
$current_month = date('m');
$current_year = date('Y');

// Mengambil data penjualan dari 2 bulan terakhir
$start_date = date('Y-m-01', strtotime('-1 months')); // Mulai dari 2 bulan terakhir
$end_date = date('Y-m-t'); // Hingga akhir bulan ini

// Query untuk mengambil data penjualan dari tabel sales dan produk dengan categorie_id = 7
$sql = "SELECT s.part_number, p.name, SUM(s.qty) AS total_qty, MONTH(s.date) AS sales_month
        FROM sales s
        LEFT JOIN products p ON p.part_number = s.part_number
        WHERE p.categorie_id = 7
        AND s.date BETWEEN '$start_date' AND '$end_date'
        GROUP BY s.part_number, sales_month
        ORDER BY s.part_number, sales_month DESC";

$sales_history = find_by_sql($sql);

// Array untuk menyimpan proyeksi penjualan
$forecast_data = [];

// Mengelompokkan data penjualan berdasarkan part_number
$sales_by_part_number = [];
foreach ($sales_history as $sale) {
    $part_number = $sale['part_number'];
    $sales_by_part_number[$part_number][] = $sale;
}

// Menghitung forecast untuk setiap part_number berdasarkan 2 bulan terakhir
foreach ($sales_by_part_number as $part_number => $sales) {
    // Jika data kurang dari 2 bulan, tetap hitung berdasarkan data yang ada
    $sales_last_2_months = array_slice($sales, 0, 2);

    // Hitung proyeksi menggunakan weighted average dari 2 bulan terakhir
    $forecast = calculate_forecast_next_3_month($sales_last_2_months);

    // Simpan data forecast untuk part_number ini
    $forecast_data[] = [
        'part_number' => $part_number,
        'name' => $sales[0]['name'], // Nama produk dari tabel products
        'forecast' => $forecast
    ];
}

include_once('layouts/header.php');
?>

<h2>Proyeksi Penjualan untuk Part Number dengan Categorie ID 7 (3 Bulan Kedepan)</h2>

<table class="table table-bordered">
    <thead>
        <tr>
            <th>Part Number</th>
            <th>Product Name</th>
            <th>Forecast Oktober</th>
            <th>Forecast November</th>
            <th>Forecast Desember</th>
        </tr>
    </thead>
    <tbody>
        <?php foreach ($forecast_data as $item): ?>
            <tr>
                <td><?php echo $item['part_number']; ?></td>
                <td><?php echo $item['name']; ?></td>
                <td><?php echo number_format($item['forecast'][0], 2); ?></td>
                <td><?php echo number_format($item['forecast'][1], 2); ?></td>
                <td><?php echo number_format($item['forecast'][2], 2); ?></td>
            </tr>
        <?php endforeach; ?>
    </tbody>
</table>

<?php include_once('layouts/footer.php'); ?>
