<?php

namespace App\Controllers\Api;

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use App\Models\MutasiBarangModel;
use App\Models\PemeliharaanModel;
use App\Models\PenghapusanModel;
use App\Models\BarangUnitModel;

class ExportController extends BaseApiController
{

 protected $barangUnitModel;

    public function __construct()
    {
        $this->barangUnitModel = new BarangUnitModel();
    }
    // ======================
    // EXPORT MUTASI
    // ======================
    public function mutasi()
{
    $model = new MutasiBarangModel();

    $data = $model
        ->select('
            mutasi_barang.tanggal,
            barang_unit.kode_unit,
            barang.nama_barang,
            r1.nama_ruangan AS dari_ruangan,
            r2.nama_ruangan AS ke_ruangan,
            mutasi_barang.keterangan
        ')
        ->join('barang_unit', 'barang_unit.id_unit = mutasi_barang.id_unit', 'left')
        ->join('barang', 'barang.id_barang = barang_unit.id_barang', 'left')
        ->join('ruangan r1', 'r1.id_ruangan = mutasi_barang.dari_ruangan', 'left')
        ->join('ruangan r2', 'r2.id_ruangan = mutasi_barang.ke_ruangan', 'left')
        ->orderBy('mutasi_barang.tanggal', 'DESC')
        ->findAll();

    return $this->exportExcel(
        'Laporan Mutasi Unit',
        ['Tanggal', 'Kode Unit', 'Nama Barang', 'Dari Ruangan', 'Ke Ruangan', 'Keterangan'],
        $data
    );
}


    // ======================
    // EXPORT PEMELIHARAAN
    // ======================
public function pemeliharaan()
{
    $model = new \App\Models\PemeliharaanModel();

    $data = $model
        ->select('
            pemeliharaan.tanggal,
            barang_unit.kode_unit,
            barang.nama_barang,
            ruangan.nama_ruangan,
            pemeliharaan.jenis_perbaikan,
            pemeliharaan.biaya,
            pemeliharaan.keterangan
        ')
        ->join('barang_unit', 'barang_unit.id_unit = pemeliharaan.id_unit')
        ->join('barang', 'barang.id_barang = barang_unit.id_barang')
        ->join('ruangan', 'ruangan.id_ruangan = barang_unit.id_ruangan')
        ->orderBy('pemeliharaan.tanggal', 'DESC')
        ->findAll();

    return $this->exportExcel(
        'Laporan Pemeliharaan Unit',
        [
            'Tanggal',
            'Kode Unit',
            'Nama Barang',
            'Ruangan',
            'Jenis Perbaikan',
            'Biaya',
            'Keterangan'
        ],
        $data
    );
}

    // ======================
    // EXPORT PEMUSNAHAN
    // ======================
    public function pemusnahan()
{
    $model = new PenghapusanModel();

    $data = $model
        ->select('
            penghapusan.tanggal,
            barang_unit.kode_unit,
            barang.nama_barang,
            ruangan.nama_ruangan,
            penghapusan.alasan,
            penghapusan.disetujui_oleh
        ')
        ->join('barang_unit', 'barang_unit.id_unit = penghapusan.id_unit')
        ->join('barang', 'barang.id_barang = barang_unit.id_barang')
        ->join('ruangan', 'ruangan.id_ruangan = barang_unit.id_ruangan')
        ->orderBy('penghapusan.tanggal', 'DESC')
        ->findAll();

    return $this->exportExcel(
        'Laporan Pemusnahan Unit',
        [
            'Tanggal',
            'Kode Unit',
            'Nama Barang',
            'Ruangan',
            'Alasan',
            'Disetujui Oleh'
        ],
        $data
    );
}

public function barangUnit()
{
    $filters = [
        'tahun_perolehan' => $this->request->getGet('tahun_perolehan'),
        'sumber_dana'     => $this->request->getGet('sumber_dana'),
    ];

    $data = $this->barangUnitModel->getWithRelation($filters);

    $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
    $sheet = $spreadsheet->getActiveSheet();

    // ===== HEADER =====
    $sheet->fromArray([
        'Kode Unit',
        'Nama Barang',
        'Kategori',
        'Ruangan',
        'Kondisi',
        'Status',
        'Sumber Dana',
        'Tahun Perolehan',
    ], null, 'A1');

    // ===== DATA =====
    $row = 2;
    foreach ($data as $d) {
        $sheet->fromArray([
            $d['kode_unit'],
            $d['nama_barang'],
            $d['nama_kategori'],
            $d['nama_ruangan'],
            $d['kondisi'],
            $d['status'],
            $d['sumber_dana'],
            $d['tahun_perolehan'],
        ], null, "A{$row}");
        $row++;
    }

    $filename = 'Laporan_Barang_Unit.xlsx';

    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    header("Content-Disposition: attachment; filename=\"{$filename}\"");
    header('Cache-Control: max-age=0');

    $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
    $writer->save('php://output');
    exit;
}

    // ======================
    // HELPER EXPORT
    // ======================
    protected function exportExcel($title, $headers, $rows)
    {
        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();

        $sheet->setTitle($title);

        // Header
        $col = 'A';
        foreach ($headers as $header) {
            $sheet->setCellValue($col . '1', $header);
            $col++;
        }

        // Data
        $rowNum = 2;
        foreach ($rows as $row) {
            $col = 'A';
            foreach ($row as $value) {
                $sheet->setCellValue($col . $rowNum, $value);
                $col++;
            }
            $rowNum++;
        }

        $filename = $title . ' - ' . date('Ymd_His') . '.xlsx';

$writer = new Xlsx($spreadsheet);

ob_start();
$writer->save('php://output');
$excelOutput = ob_get_clean();

return $this->response
    ->setHeader(
        'Content-Type',
        'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
    )
    ->setHeader(
        'Content-Disposition',
        'attachment; filename="'.$filename.'"'
    )
    ->setHeader('Cache-Control', 'max-age=0')
    ->setBody($excelOutput);

    }
}