<?php

namespace App\Http\Controllers\Rekap;

use App\Models\User;
use App\Models\tagihan;
use App\Models\Transaksi;
use App\Models\TahunAjaran;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Exports\RekapitulasiExport;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Maatwebsite\Excel\Facades\Excel;
use Yajra\DataTables\Facades\DataTables;
use Carbon\Carbon;

class RekapitulasiPengeluaranController extends Controller
{

    public function index(Request $request)
    {
        $bulan = $request->query('bulan'); // Ambil nilai bulan dari query string
        $selectedyear = $request->query('tahun');
        $tagihanid = $request->query('tagihan_id');
        if (Auth::user()->role == 'bendahara-excellent')
            $jurusan = 'excellent';
        else
            $jurusan = 'reguler';
        $trans = Transaksi::with(['user', 'jenistagihan'])
            ->where('jurusan', $jurusan)
            ->where('status', '1')
            ->whereNotNull('tgl_pembayaran')
            ->latest()
            ->get();
        $totaltransaksi = Transaksi::where('status', '1')->count();
        $trans->map(function ($item) {
            $item->tgl_pembayaran_formatted = \Carbon\Carbon::parse($item->tgl_pembayaran)->format('F j, Y');
            return $item;
        });
        $no = 1;
        $listbulan = [
            '1' => 'Januari',
            '2' => 'Februari',
            '3' => 'Maret',
            '4' => 'April',
            '5' => 'Mei',
            '6' => 'Juni',
            '7' => 'Juli',
            '8' => 'Agustus',
            '9' => 'September',
            '10' => 'Oktober',
            '11' => 'November',
            '12' => 'Desember',
        ];
        $tagihan = tagihan::whereNotIn('id', [1, 2, 3, 4, 5, 6])->get();
        $siswa = User::where('role', 'siswa')->get();
        $tahun = TahunAjaran::where('status', 'aktif')->get();
        $query = Transaksi::select(
            'jenistagihan.name as Namatagihan',
            'transaksi.tagihan_id',
            DB::raw('GROUP_CONCAT(transaksi.keterangan SEPARATOR ", ") as keterangan'),
            DB::raw('SUM(transaksi.total) as total'),
            DB::raw('MIN(transaksi.tgl_pembayaran) as tgl_pembayaran') // Menggunakan MIN untuk tanggal pembayaran pertama
        )
            ->join('jenistagihan', 'jenistagihan.id', '=', 'transaksi.tagihan_id')
            ->where('jenis_transaksi', 'Pengeluaran')
            ->where('jurusan', $jurusan);

        if ($selectedyear) {
            $query->whereYear('tgl_pembayaran', $selectedyear);
        }
        if ($bulan) {
            $query->whereMonth('tgl_pembayaran', $bulan);
        }
        if (Auth::user()->role == 'bendahara-excellent') {
            $query->whereNotIn('tagihan_id', ['5']);
        }

        $query->groupBy('transaksi.tagihan_id');
        $data = $query->get();
        $jumlahtotal = $data->sum('total');

        return view('pages.rekapitulasi.rekapitulasi-pengeluaran', compact('siswa', 'tagihan', 'jumlahtotal', 'no', 'tahun', 'trans', 'data', 'totaltransaksi', 'listbulan', 'query'));
    }
    public function exportExcel(Request $request)
    {
        Carbon::setLocale('id');
        if (Auth::user()->role == 'bendahara-excellent')
            $jurusan = 'excellent';
        else
            $jurusan = 'reguler';
        $tagihanid = $request->input('tagihan_id');
        $tahun = $request->input('tahun');
        $bulan = $request->input('bulan');
        $query = Transaksi::select(
            'jenistagihan.name as Namatagihan',
            'transaksi.tagihan_id',
            DB::raw('GROUP_CONCAT(transaksi.keterangan SEPARATOR ", ") as keterangan'),
            DB::raw('SUM(transaksi.total) as total'),
            DB::raw('MIN(transaksi.tgl_pembayaran) as tgl_pembayaran') // Menggunakan MIN untuk tanggal pembayaran pertama
        )
            ->join('jenistagihan', 'jenistagihan.id', '=', 'transaksi.tagihan_id')
            ->where('jenis_transaksi', 'Pengeluaran')
            ->where('jurusan', $jurusan);

        if ($tahun) {
            $query->whereYear('tgl_pembayaran', $tahun);
        }
        if ($bulan) {
            $query->whereMonth('tgl_pembayaran', $bulan);
        }
        if (Auth::user()->role == 'bendahara-excellent') {
            $query->whereNotIn('tagihan_id', ['5']);
        }

        $query->groupBy('transaksi.tagihan_id');
        $data = $query->get();
        $jumlahtotal = $data->sum('total');
        $title = 'Pengeluaran';

        // Buat nama file berdasarkan ketersediaan bulan dan tahun
        if ($tahun && $bulan) {
            $namaFile = 'Rekapitulasi-Pengeluaran_' . $tahun . '_' . Carbon::createFromFormat('m', $bulan)->translatedFormat('F') . '.xlsx';
        } elseif ($tahun) {
            $namaFile = 'Rekapitulasi-Pengeluaran_' . $tahun . '.xlsx';
        } else {
            $namaFile = 'Rekapitulasi-Pengeluaran.xlsx';
        }
        return Excel::download(new RekapitulasiExport($data, $jumlahtotal, $title, $bulan, $tahun), $namaFile);
    }
}
