<?php

namespace App\Http\Controllers;

use App\Models\Penjualan;
use App\Models\Users;
use Illuminate\Http\Request;
use Barryvdh\DomPDF\Facade\Pdf;

class LaporanController extends Controller
{
    /**
     * Tampilkan halaman laporan penjualan.
     */
    public function index(Request $request)
    {
        // Ambil hanya user yang role-nya pengguna
        $penggunas = Users::where('role', 'pengguna')->get();

        // Query penjualan + relasi pelanggan dan user
        $query = Penjualan::with(['pelanggan', 'user']);

        // Filter tanggal
        if ($request->filled('from_date') && $request->filled('to_date')) {
            $query->whereBetween('tanggal_penjualan', [
                $request->from_date,
                $request->to_date
            ]);
        }

        // Filter pengguna
        if ($request->filled('pengguna_id')) {
            $query->where('user_id', $request->pengguna_id);
        }

        // 🔍 ------------------- SEARCH --------------------
        if ($request->filled('search')) {
            $search = $request->search;

            $query->where(function ($q) use ($search) {
                $q->where('tanggal_penjualan', 'LIKE', "%{$search}%")
                  ->orWhere('total_harga', 'LIKE', "%{$search}%")
                  ->orWhereHas('pelanggan', function ($p) use ($search) {
                      $p->where('nama_pelanggan', 'LIKE', "%{$search}%");
                  })
                  ->orWhereHas('user', function ($u) use ($search) {
                      $u->where('username', 'LIKE', "%{$search}%");
                  });
            });
        }
        // -------------------------------------------------

        $penjualans = $query->latest()->get();

        return view('laporan.index', compact('penjualans', 'penggunas'));
    }

    /**
     * Cetak PDF laporan
     */
    public function print(Request $request)
    {
        // Ambil pengguna
        $penggunas = Users::where('role', 'pengguna')->get();

        $query = Penjualan::with(['pelanggan', 'user']);

        // Filter tanggal
        if ($request->filled('from_date') && $request->filled('to_date')) {
            $query->whereBetween('tanggal_penjualan', [
                $request->from_date,
                $request->to_date
            ]);
        }

        // Filter pengguna
        if ($request->filled('pengguna_id')) {
            $query->where('user_id', $request->pengguna_id);
        }

        // 🔍 SEARCH juga berlaku untuk PDF
        if ($request->filled('search')) {
            $search = $request->search;

            $query->where(function ($q) use ($search) {
                $q->where('tanggal_penjualan', 'LIKE', "%{$search}%")
                  ->orWhere('total_harga', 'LIKE', "%{$search}%")
                  ->orWhereHas('pelanggan', function ($p) use ($search) {
                      $p->where('nama_pelanggan', 'LIKE', "%{$search}%");
                  })
                  ->orWhereHas('user', function ($u) use ($search) {
                      $u->where('username', 'LIKE', "%{$search}%");
                  });
            });
        }

        $penjualans = $query->latest()->get();

        // Load PDF view
        $pdf = Pdf::loadView('laporan.print', [
            'penjualans' => $penjualans,
            'penggunas' => $penggunas,
            'request' => $request
        ])->setPaper('a4', 'portrait');

        return $pdf->stream('laporan-penjualan.pdf');
    }
}
