<?php

namespace App\Http\Controllers;

use App\Models\permohonanProject;
use App\Models\Preference;
use App\Models\PreferencesPermohonan;
use App\Models\Project;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;

class PemerintahController extends Controller
{


    //ini kurang benar sedikit
    // public function index(Request $request)
    // {
    //     // Mengambil preferensi pengguna
    //     $preferences = PreferencesPermohonan::where('user_id', Auth::id())->first();

    //     // Inisialisasi query untuk proyek
    //     $query = permohonanProject::query();

    //     // Memastikan preferensi ada
    //     if ($preferences) {
    //         // Filter proyek berdasarkan kategori jika kategori ada
    //         if (!empty($preferences->kategori)) {
    //             $kategoriPreferences = json_decode($preferences->kategori, true);
    //             if (is_array($kategoriPreferences) && count($kategoriPreferences) > 0) {
    //                 $query->whereIn('kategori', $kategoriPreferences);
    //             } else {
    //                 return view('pemerintah.index', ['message' => 'Data Not Found: Kategori tidak valid.']);
    //             }
    //         }


    //         // Filter proyek berdasarkan bidang sub sektor ekonomi kreatif jika ada
    //         if (!empty($preferences->bidang_sub_sektor_ekonomi_kreatif)) {
    //             $bidangPreferences = json_decode($preferences->bidang_sub_sektor_ekonomi_kreatif, true);

    //             // Memastikan $bidangPreferences adalah array dan tidak kosong
    //             if (is_array($bidangPreferences) && count($bidangPreferences) > 0) {
    //                 // Membuat query untuk mencocokkan kata kunci dalam bidang_sub_sektor_ekonomi_kreatif
    //                 $query->where(function ($subQuery) use ($bidangPreferences) {
    //                     foreach ($bidangPreferences as $bidang) {
    //                         $subQuery->orWhere('bidang_sub_sektor_ekonomi_kreatif', 'LIKE', '%' . $bidang . '%');
    //                     }
    //                 });
    //             } else {
    //                 return view('pemerintah.index', ['message' => 'Data Not Found: Bidang sub sektor ekonomi kreatif tidak valid.']);
    //             }
    //         }


    //         // Filter berdasarkan batas terima tawaran jika ada
    //         if (!empty($preferences->batas_terima_tawaran)) {
    //             $query->where('batas_terima_tawaran', '<=', $preferences->batas_terima_tawaran);
    //         }

    //         // Memeriksa preferensi nominal_min dan nominal_max
    //         if (isset($preferences->range_min, $preferences->range_max)) {
    //             $rangeMin = $preferences->range_min;
    //             $rangeMax = $preferences->range_max;

    //             // Menambahkan filter untuk range_min dan range_max
    //             $query->where(function ($q) use ($rangeMin, $rangeMax) {
    //                 $q->whereHas('pelatihan', function ($query) use ($rangeMin, $rangeMax) {
    //                     $query->whereBetween('biaya', [$rangeMin, $rangeMax]);
    //                 })
    //                     ->orWhereHas('pendanaan', function ($query) use ($rangeMin, $rangeMax) {
    //                         $query->whereBetween('jumlah_dana', [$rangeMin, $rangeMax]);
    //                     })
    //                     ->orWhereHas('riset', function ($query) use ($rangeMin, $rangeMax) {
    //                         $query->whereBetween('anggaran', [$rangeMin, $rangeMax]);
    //                     })
    //                     ->orWhereHas('proyekInvestor', function ($query) use ($rangeMin, $rangeMax) {
    //                         $query->whereBetween('nominal', [$rangeMin, $rangeMax]);
    //                     });
    //             });
    //         }

    //         // Filter berdasarkan status jika diberikan
    //         if (!empty($preferences->status)) {
    //             $statusPreferences = json_decode($preferences->status, true);
    //             if (is_array($statusPreferences) && count($statusPreferences) > 0) {
    //                 $query->where(function ($q) use ($statusPreferences) {
    //                     $q->whereHas('pelatihan', function ($subQuery) use ($statusPreferences) {
    //                         $subQuery->whereIn('status_pelatihan', $statusPreferences);
    //                     })
    //                         ->orWhereHas('pendanaan', function ($subQuery) use ($statusPreferences) {
    //                             $subQuery->whereIn('status_pendanaan', $statusPreferences);
    //                         });
    //                 });
    //             } else {
    //                 return view('pemerintah.index', ['message' => 'Data Not Found: Status tidak valid.']);
    //             }
    //         }
    //     } else {
    //         return view('pemerintah.index', ['message' => 'Data Not Found: Preferensi tidak ditemukan.']);
    //     }

    //     // Mengambil proyek sesuai dengan filter yang diterapkan
    //     $projects = $query->get();

    //     // Cek jika proyek ditemukan
    //     if ($projects->isEmpty()) {
    //         return view('pemerintah.index', ['message' => 'Data Not Found: Tidak ada proyek yang ditemukan.']);
    //     }

    //     return view('pemerintah.index', ['projects' => $projects]);
    // }


    // public function index(Request $request)
    // {
    //     // Mengambil preferensi pengguna
    //     $preferences = PreferencesPermohonan::where('user_id', Auth::id())->first();

    //     // Inisialisasi query untuk proyek
    //     $query = permohonanProject::query();

    //     // Memastikan preferensi ada
    //     if ($preferences) {
    //         // Filter proyek berdasarkan kategori jika kategori ada
    //         if (!empty($preferences->kategori)) {
    //             $kategoriPreferences = json_decode($preferences->kategori, true);
    //             if (is_array($kategoriPreferences) && count($kategoriPreferences) > 0) {
    //                 $query->whereIn('kategori', $kategoriPreferences);
    //             } else {
    //                 return view('pemerintah.index', ['message' => 'Data Not Found: Kategori tidak valid.']);
    //             }
    //         }

    //         // Filter proyek berdasarkan bidang sub sektor ekonomi kreatif jika ada
    //         if (!empty($preferences->bidang_sub_sektor_ekonomi_kreatif)) {
    //             $bidangPreferences = json_decode($preferences->bidang_sub_sektor_ekonomi_kreatif, true);

    //             // Memastikan $bidangPreferences adalah array dan tidak kosong
    //             if (is_array($bidangPreferences) && count($bidangPreferences) > 0) {
    //                 // Membuat query untuk mencocokkan kata kunci dalam bidang_sub_sektor_ekonomi_kreatif
    //                 $query->where(function ($subQuery) use ($bidangPreferences) {
    //                     foreach ($bidangPreferences as $bidang) {
    //                         $subQuery->orWhere('bidang_sub_sektor_ekonomi_kreatif', 'LIKE', '%' . $bidang . '%');
    //                     }
    //                 });
    //             } else {
    //                 return view('pemerintah.index', ['message' => 'Data Not Found: Bidang sub sektor ekonomi kreatif tidak valid.']);
    //             }
    //         }

    //         // Filter berdasarkan batas terima tawaran jika ada
    //         if (!empty($preferences->batas_terima_tawaran)) {
    //             $query->where('batas_terima_tawaran', '<=', $preferences->batas_terima_tawaran);
    //         }

    //         // Filter berdasarkan range nominal jika diberikan
    //         if (isset($preferences->range_min, $preferences->range_max)) {
    //             $rangeMin = $preferences->range_min;
    //             $rangeMax = $preferences->range_max;

    //             // Menambahkan filter untuk range_min dan range_max di berbagai kategori
    //             $query->where(function ($q) use ($rangeMin, $rangeMax) {
    //                 $q->whereHas('pelatihan', function ($query) use ($rangeMin, $rangeMax) {
    //                     $query->whereBetween('biaya', [$rangeMin, $rangeMax]);
    //                 })
    //                     ->orWhereHas('pendanaan', function ($query) use ($rangeMin, $rangeMax) {
    //                         $query->whereBetween('jumlah_dana', [$rangeMin, $rangeMax]);
    //                     })
    //                     ->orWhereHas('riset', function ($query) use ($rangeMin, $rangeMax) {
    //                         $query->whereBetween('anggaran', [$rangeMin, $rangeMax]);
    //                     })
    //                     ->orWhereHas('proyekInvestor', function ($query) use ($rangeMin, $rangeMax) {
    //                         $query->whereBetween('nominal', [$rangeMin, $rangeMax]);
    //                     });
    //             });
    //         }

    //         // Filter berdasarkan status jika diberikan
    //         if (!empty($preferences->status)) {
    //             $statusPreferences = json_decode($preferences->status, true);
    //             if (is_array($statusPreferences) && count($statusPreferences) > 0) {
    //                 $query->where(function ($q) use ($statusPreferences) {
    //                     $q->whereHas('pelatihan', function ($subQuery) use ($statusPreferences) {
    //                         $subQuery->whereIn('status_pelatihan', $statusPreferences);
    //                     })
    //                         ->orWhereHas('pendanaan', function ($subQuery) use ($statusPreferences) {
    //                             $subQuery->whereIn('status_pendanaan', $statusPreferences);
    //                         });
    //                 });
    //             } else {
    //                 return view('pemerintah.index', ['message' => 'Data Not Found: Status tidak valid.']);
    //             }
    //         }
    //     } else {
    //         return view('pemerintah.index', ['message' => 'Data Not Found: Preferensi tidak ditemukan.']);
    //     }

    //     // Mengambil proyek sesuai dengan filter yang diterapkan
    //     $projects = $query->get();

    //     // Cek jika proyek ditemukan
    //     if ($projects->isEmpty()) {
    //         return view('pemerintah.index', ['message' => 'Data Not Found: Tidak ada proyek yang ditemukan.']);
    //     }

    //     return view('pemerintah.index', ['projects' => $projects]);
    // }

    // public function index(Request $request)
    // {
    //     // Mengambil preferensi pengguna
    //     $preferences = PreferencesPermohonan::where('user_id', Auth::id())->first();

    //     // Inisialisasi query untuk proyek
    //     $query = permohonanProject::query();

    //     // Memastikan preferensi ada
    //     if ($preferences) {
    //         // Filter proyek berdasarkan kategori jika kategori ada
    //         if (!empty($preferences->kategori)) {
    //             $kategoriPreferences = json_decode($preferences->kategori, true);
    //             if (is_array($kategoriPreferences) && count($kategoriPreferences) > 0) {
    //                 $query->whereIn('kategori', $kategoriPreferences);
    //             } else {
    //                 return view('pemerintah.index', ['message' => 'Data Not Found: Kategori tidak valid.']);
    //             }
    //         }

    //         // Filter proyek berdasarkan bidang sub sektor ekonomi kreatif jika ada
    //         if (!empty($preferences->bidang_sub_sektor_ekonomi_kreatif)) {
    //             $bidangPreferences = json_decode($preferences->bidang_sub_sektor_ekonomi_kreatif, true);

    //             // Memastikan $bidangPreferences adalah array dan tidak kosong
    //             if (is_array($bidangPreferences) && count($bidangPreferences) > 0) {
    //                 // Membuat query untuk mencocokkan kata kunci dalam bidang_sub_sektor_ekonomi_kreatif
    //                 $query->where(function ($subQuery) use ($bidangPreferences) {
    //                     foreach ($bidangPreferences as $bidang) {
    //                         $subQuery->orWhere('bidang_sub_sektor_ekonomi_kreatif', 'LIKE', '%' . $bidang . '%');
    //                     }
    //                 });
    //             } else {
    //                 return view('pemerintah.index', ['message' => 'Data Not Found: Bidang sub sektor ekonomi kreatif tidak valid.']);
    //             }
    //         }

    //         // Filter berdasarkan batas terima tawaran jika ada
    //         if (!empty($preferences->batas_terima_tawaran)) {
    //             $query->where('batas_terima_tawaran', '<=', $preferences->batas_terima_tawaran);
    //         }

    //         // Filter berdasarkan range nominal jika diberikan
    //         if (isset($preferences->range_min, $preferences->range_max)) {
    //             $rangeMin = $preferences->range_min;
    //             $rangeMax = $preferences->range_max;

    //             // Menambahkan filter untuk range_min dan range_max di berbagai kategori
    //             $query->where(function ($q) use ($rangeMin, $rangeMax) {
    //                 $q->whereHas('pelatihan', function ($query) use ($rangeMin, $rangeMax) {
    //                     $query->whereBetween('biaya', [$rangeMin, $rangeMax]);
    //                 })
    //                     ->orWhereHas('pendanaan', function ($query) use ($rangeMin, $rangeMax) {
    //                         $query->whereBetween('jumlah_dana', [$rangeMin, $rangeMax]);
    //                     })
    //                     ->orWhereHas('riset', function ($query) use ($rangeMin, $rangeMax) {
    //                         $query->whereBetween('anggaran', [$rangeMin, $rangeMax]);
    //                     })
    //                     ->orWhereHas('proyekInvestor', function ($query) use ($rangeMin, $rangeMax) {
    //                         $query->whereBetween('nominal', [$rangeMin, $rangeMax]);
    //                     });
    //             });
    //         }

    //         // Filter berdasarkan status jika diberikan
    //         if (!empty($preferences->status)) {
    //             $statusPreferences = json_decode($preferences->status, true);
    //             if (is_array($statusPreferences) && count($statusPreferences) > 0) {
    //                 $query->where(function ($q) use ($statusPreferences) {
    //                     $q->whereHas('pelatihan', function ($subQuery) use ($statusPreferences) {
    //                         $subQuery->whereIn('status_pelatihan', $statusPreferences);
    //                     })
    //                         ->orWhereHas('pendanaan', function ($subQuery) use ($statusPreferences) {
    //                             $subQuery->whereIn('status_pendanaan', $statusPreferences);
    //                         });
    //                 });
    //             } else {
    //                 return view('pemerintah.index', ['message' => 'Data Not Found: Status tidak valid.']);
    //             }
    //         }

    //         // Ambil semua preferensi pengguna lain untuk perhitungan cosine similarity
    //         $allPreferences = PreferencesPermohonan::where('user_id', '!=', Auth::id())->get();

    //         // Buat matriks preferensi
    //         $userPreferencesMatrix = [];
    //         foreach ($allPreferences as $pref) {
    //             $userPreferencesMatrix[$pref->user_id] = json_decode($pref->kategori, true);
    //         }

    //         // Menghitung Cosine Similarity dengan preferensi pengguna yang sedang login
    //         $currentUserPreferences = json_decode($preferences->kategori, true);
    //         $similarities = [];

    //         foreach ($userPreferencesMatrix as $userId => $projectIds) {
    //             $similarity = $this->cosineSimilarity($currentUserPreferences, $projectIds);
    //             $similarities[$userId] = $similarity;
    //         }

    //         // Mengurutkan pengguna berdasarkan kesamaan tertinggi
    //         arsort($similarities);
    //         $topUsers = array_keys(array_slice($similarities, 0, 5, true)); // Ambil 5 pengguna teratas

    //         // Mengumpulkan proyek yang direkomendasikan dari pengguna teratas
    //         $recommendedProjects = [];
    //         foreach ($topUsers as $userId) {
    //             $userProjectIds = $userPreferencesMatrix[$userId];
    //             foreach ($userProjectIds as $projectId) {
    //                 if (!in_array($projectId, json_decode($preferences->kategori, true))) {
    //                     $recommendedProjects[$projectId] = true; // Menyimpan proyek yang belum dilihat
    //                 }
    //             }
    //         }

    //         // Mengambil proyek yang direkomendasikan
    //         if (!empty($recommendedProjects)) {
    //             $query->orWhereIn('id', array_keys($recommendedProjects));
    //         }
    //     } else {
    //         return view('pemerintah.index', ['message' => 'Data Not Found: Preferensi tidak ditemukan.']);
    //     }

    //     // Mengambil proyek sesuai dengan filter yang diterapkan
    //     $projects = $query->get();

    //     // Cek jika proyek ditemukan
    //     if ($projects->isEmpty()) {
    //         return view('pemerintah.index', ['message' => 'Data Not Found: Tidak ada proyek yang ditemukan.']);
    //     }

    //     return view('pemerintah.index', ['projects' => $projects]);
    // }

    // // Fungsi untuk menghitung cosine similarity
    // private function cosineSimilarity($currentUserPrefs, $otherUserPrefs)
    // {
    //     // Membuat vektor dari preferensi
    //     $currentUserVector = array_fill_keys(array_keys($otherUserPrefs), 0);

    //     foreach ($currentUserPrefs as $pref) {
    //         $currentUserVector[$pref] = 1; // Atau gunakan rating jika ada
    //     }

    //     // Menghitung dot product dan magnitudes
    //     $dotProduct = 0;
    //     $magnitudeA = 0;
    //     $magnitudeB = 0;

    //     foreach ($currentUserVector as $projectId => $value) {
    //         if (isset($otherUserPrefs[$projectId])) {
    //             $dotProduct += $value * 1; // Asumsikan preferensi pengguna lain adalah 1 jika ada
    //         }
    //         $magnitudeA += $value * $value;
    //         $magnitudeB += (isset($otherUserPrefs[$projectId]) ? 1 : 0) * (isset($otherUserPrefs[$projectId]) ? 1 : 0);
    //     }

    //     if ($magnitudeA == 0 || $magnitudeB == 0) {
    //         return 0; // Mencegah pembagian dengan nol
    //     }

    //     return $dotProduct / (sqrt($magnitudeA) * sqrt($magnitudeB));
    // }


    public function index(Request $request)
    {
        // Mengambil preferensi pengguna
        $preferences = Preference::where('user_id', Auth::id())->first();

        // Inisialisasi query untuk proyek
        $query = permohonanProject::query();



        // Memastikan preferensi ada
        if ($preferences) {
            // Filter proyek berdasarkan kategori jika kategori ada
            if (!empty($preferences->kategori)) {
                $kategoriPreferences = json_decode($preferences->kategori, true);
                if (is_array($kategoriPreferences) && count($kategoriPreferences) > 0) {
                    $query->whereIn('kategori', $kategoriPreferences);
                }
            }

            // Filter proyek berdasarkan bidang sub sektor ekonomi kreatif jika ada
            if (!empty($preferences->bidang_sub_sektor_ekonomi_kreatif)) {
                $bidangPreferences = json_decode($preferences->bidang_sub_sektor_ekonomi_kreatif, true);
                if (is_array($bidangPreferences) && count($bidangPreferences) > 0) {
                    // Gunakan where untuk mencocokkan semua bidang
                    $query->where(function ($subQuery) use ($bidangPreferences) {
                        foreach ($bidangPreferences as $bidang) {
                            $subQuery->orWhere('bidang_sub_sektor_ekonomi_kreatif', 'LIKE', '%' . $bidang . '%');
                        }
                    });
                }
            }

            // Filter berdasarkan batas terima tawaran jika ada
            // if (!empty($preferences->batas_terima_tawaran)) {
            //     $query->where('batas_terima_tawaran', '>=', now()); // Perbaikan: Memastikan batas tawaran masih berlaku
            // }

            if (!empty($preferences->batas_terima_tawaran)) {
                $query->where('batas_terima_tawaran', '<=', $preferences->batas_terima_tawaran);
            }

            // Filter berdasarkan range nominal jika diberikan
            if (isset($preferences->range_min, $preferences->range_max)) {
                $rangeMin = $preferences->range_min;
                $rangeMax = $preferences->range_max;

                $query->where(function ($q) use ($rangeMin, $rangeMax) {
                    $q->whereHas('pelatihan', function ($query) use ($rangeMin, $rangeMax) {
                        $query->whereBetween('biaya', [$rangeMin, $rangeMax]);
                    })
                        ->orWhereHas('pendanaan', function ($query) use ($rangeMin, $rangeMax) {
                            $query->whereBetween('jumlah_dana', [$rangeMin, $rangeMax]);
                        })
                        ->orWhereHas('riset', function ($query) use ($rangeMin, $rangeMax) {
                            $query->whereBetween('anggaran', [$rangeMin, $rangeMax]);
                        })
                        ->orWhereHas('proyekInvestor', function ($query) use ($rangeMin, $rangeMax) {
                            $query->whereBetween('nominal', [$rangeMin, $rangeMax]);
                        });
                });
            }

            // Filter berdasarkan status jika diberikan
            if (!empty($preferences->status)) {
                $statusPreferences = json_decode($preferences->status, true);
                if (is_array($statusPreferences) && count($statusPreferences) > 0) {
                    $query->where(function ($q) use ($statusPreferences) {
                        $q->whereHas('pelatihan', function ($subQuery) use ($statusPreferences) {
                            $subQuery->whereIn('status_pelatihan', $statusPreferences);
                        })
                            ->orWhereHas('pendanaan', function ($subQuery) use ($statusPreferences) {
                                $subQuery->whereIn('status_pendanaan', $statusPreferences);
                            });
                    });
                }
            }

            // Tambahan filter berdasarkan audiens
            if (!empty($preferences->audiens)) {
                $query->whereHas('pelatihan', function ($pelatihanQuery) use ($preferences) {
                    // Filter audiens di relasi pelatihan
                    $pelatihanQuery->where('audiens', 'LIKE', '%' . $preferences->audiens . '%');
                });
            }


            // Tambahan filter berdasarkan benefit
            if (!empty($preferences->benefit)) {
                $query->where(function ($q) use ($preferences) {
                    // Filter benefit dari tabel utama
                    $q->orWhereHas('pelatihan', function ($pelatihanQuery) use ($preferences) {
                        $pelatihanQuery->where('benefit_pelatihan', 'LIKE', '%' . $preferences->benefit . '%');
                    })

                        // Filter benefit dari relasi riset
                        ->orWhereHas('riset', function ($risetQuery) use ($preferences) {
                            $risetQuery->where('benefit_riset', 'LIKE', '%' . $preferences->benefit . '%');
                        })

                        // Filter benefit dari relasi pendanaan
                        ->orWhereHas('pendanaan', function ($pendanaanQuery) use ($preferences) {
                            $pendanaanQuery->where('benefit_pendanaan', 'LIKE', '%' . $preferences->benefit . '%');
                        });
                });
            }


            // Tambahan filter berdasarkan lokasi
            if (!empty($preferences->lokasi)) {
                $query->where(function ($q) use ($preferences) {
                    // Filter lokasi dari tabel utama
                    $q->orWhereHas('pelatihan', function ($pelatihanQuery) use ($preferences) {
                        $pelatihanQuery->where('lokasi_pelatihan', 'LIKE', '%' . $preferences->lokasi . '%');
                    })

                        // Filter lokasi dari relasi pendanaan
                        ->orWhereHas('pendanaan', function ($pendanaanQuery) use ($preferences) {
                            $pendanaanQuery->where('lokasi_pendanaan', 'LIKE', '%' . $preferences->lokasi . '%');
                        })

                        // Filter lokasi dari relasi riset
                        ->orWhereHas('riset', function ($risetQuery) use ($preferences) {
                            $risetQuery->where('lokasi_riset', 'LIKE', '%' . $preferences->lokasi . '%');
                        });
                });
            }


            // Tambahan filter berdasarkan metodologi
            if (!empty($preferences->metodologi)) {
                $query->where(function ($q) use ($preferences) {
                    // Filter metodologi dari tabel utama
                    $q->orWhereHas('riset', function ($risetQuery) use ($preferences) {
                        $risetQuery->where('metodologi', 'LIKE', '%' . $preferences->metodologi . '%');
                    });
                });
            }

            // Tambahan filter berdasarkan rincian kebutuhan
            if (!empty($preferences->rincian_kebutuhan)) {
                $query->where('rincian_kebutuhan', 'LIKE', '%' . $preferences->rincian_kebutuhan . '%');
            }

            // Tambahan filter berdasarkan penerima manfaat
            if (!empty($preferences->penerima_manfaat)) {
                $query->where('penerima_manfaat_pengguna_project', 'LIKE', '%' . $preferences->penerima_manfaat . '%');
            }
        } else {
            return view('pemerintah.index', ['message' => 'Data Rekomendasi tidak ditemukan. Silahkan perbarui preferensi anda di profil']);
        }

        // Mengambil proyek sesuai dengan filter yang diterapkan
        // $projects = $query->get();

        $projects = $query->paginate(6);
        // Cek jika proyek ditemukan
        if ($projects->isEmpty()) {
            return view('pemerintah.index', ['message' => 'Data Not Found: Tidak ada program yang ditemukan.']);
        }

        return view('pemerintah.index', ['projects' => $projects]);
    }


    public function search(Request $request)
    {
        // Ambil input pencarian dari request
        $search = $request->input('search');

        // Inisialisasi query untuk proyek
        $query = permohonanProject::query();

        // Filter proyek berdasarkan input pencarian jika ada
        if (!empty($search)) {
            $query->where(function ($q) use ($search) {
                $q->where('judul_project', 'LIKE', '%' . $search . '%')
                    ->orWhere('latar_belakang', 'LIKE', '%' . $search . '%')
                    ->orWhere('kategori', 'LIKE', '%' . $search . '%')
                    ->orWhere('bidang_sub_sektor_ekonomi_kreatif', 'LIKE', '%' . $search . '%')
                    ->orWhere('penerima_manfaat_pengguna_project', 'LIKE', '%' . $search . '%')
                    ->orWhere('parameter_kesuksesan', 'LIKE', '%' . $search . '%')
                    ->orWhere('rincian_kebutuhan', 'LIKE', '%' . $search . '%')
                    ->orWhere('deskripsi_kolaborasi', 'LIKE', '%' . $search . '%')
                    ->orWhere('kata_kunci', 'LIKE', '%' . $search . '%')
                    ->orWhere('solusi_project', 'LIKE', '%' . $search . '%');
            });
        }

        // Mengambil preferensi pengguna
        $preferences = Preference::where('user_id', Auth::id())->first();

        // Memastikan preferensi ada
        if ($preferences) {
            // Filter proyek berdasarkan kategori jika kategori ada
            if (!empty($preferences->kategori)) {
                $kategoriPreferences = json_decode($preferences->kategori, true);
                if (is_array($kategoriPreferences) && count($kategoriPreferences) > 0) {
                    $query->whereIn('kategori', $kategoriPreferences);
                }
            }

            // Filter proyek berdasarkan bidang sub sektor ekonomi kreatif jika ada
            if (!empty($preferences->bidang_sub_sektor_ekonomi_kreatif)) {
                $bidangPreferences = json_decode($preferences->bidang_sub_sektor_ekonomi_kreatif, true);
                if (is_array($bidangPreferences) && count($bidangPreferences) > 0) {
                    $query->where(function ($subQuery) use ($bidangPreferences) {
                        foreach ($bidangPreferences as $bidang) {
                            $subQuery->orWhere('bidang_sub_sektor_ekonomi_kreatif', 'LIKE', '%' . $bidang . '%');
                        }
                    });
                }
            }

            // Filter berdasarkan batas terima tawaran jika ada
            if (!empty($preferences->batas_terima_tawaran)) {
                $query->where('batas_terima_tawaran', '<=', $preferences->batas_terima_tawaran);
            }

            // Filter berdasarkan range nominal jika diberikan
            if (isset($preferences->range_min, $preferences->range_max)) {
                $rangeMin = $preferences->range_min;
                $rangeMax = $preferences->range_max;

                $query->where(function ($q) use ($rangeMin, $rangeMax) {
                    $q->whereHas('pelatihan', function ($query) use ($rangeMin, $rangeMax) {
                        $query->whereBetween('biaya', [$rangeMin, $rangeMax]);
                    })
                        ->orWhereHas('pendanaan', function ($query) use ($rangeMin, $rangeMax) {
                            $query->whereBetween('jumlah_dana', [$rangeMin, $rangeMax]);
                        })
                        ->orWhereHas('riset', function ($query) use ($rangeMin, $rangeMax) {
                            $query->whereBetween('anggaran', [$rangeMin, $rangeMax]);
                        })
                        ->orWhereHas('proyekInvestor', function ($query) use ($rangeMin, $rangeMax) {
                            $query->whereBetween('nominal', [$rangeMin, $rangeMax]);
                        });
                });
            }

            // Filter berdasarkan status jika diberikan
            if (!empty($preferences->status)) {
                $statusPreferences = json_decode($preferences->status, true);
                if (is_array($statusPreferences) && count($statusPreferences) > 0) {
                    $query->where(function ($q) use ($statusPreferences) {
                        $q->whereHas('pelatihan', function ($subQuery) use ($statusPreferences) {
                            $subQuery->whereIn('status_pelatihan', $statusPreferences);
                        })
                            ->orWhereHas('pendanaan', function ($subQuery) use ($statusPreferences) {
                                $subQuery->whereIn('status_pendanaan', $statusPreferences);
                            });
                    });
                }
            }

            // Tambahan filter berdasarkan audiens
            if (!empty($preferences->audiens)) {
                $query->whereHas('pelatihan', function ($pelatihanQuery) use ($preferences) {
                    $pelatihanQuery->where('audiens', 'LIKE', '%' . $preferences->audiens . '%');
                });
            }

            // Tambahan filter berdasarkan benefit
            if (!empty($preferences->benefit)) {
                $query->where(function ($q) use ($preferences) {
                    $q->where('benefit', 'LIKE', '%' . $preferences->benefit . '%')
                        ->orWhereHas('pelatihan', function ($pelatihanQuery) use ($preferences) {
                            $pelatihanQuery->where('benefit_pelatihan', 'LIKE', '%' . $preferences->benefit . '%');
                        })
                        ->orWhereHas('riset', function ($risetQuery) use ($preferences) {
                            $risetQuery->where('benefit_riset', 'LIKE', '%' . $preferences->benefit . '%');
                        })
                        ->orWhereHas('pendanaan', function ($pendanaanQuery) use ($preferences) {
                            $pendanaanQuery->where('benefit_pendanaan', 'LIKE', '%' . $preferences->benefit . '%');
                        });
                });
            }

            // Tambahan filter berdasarkan lokasi
            if (!empty($preferences->lokasi)) {
                $query->where(function ($q) use ($preferences) {
                    $q->where('lokasi', 'LIKE', '%' . $preferences->lokasi . '%')
                        ->orWhereHas('pelatihan', function ($pelatihanQuery) use ($preferences) {
                            $pelatihanQuery->where('lokasi_pelatihan', 'LIKE', '%' . $preferences->lokasi . '%');
                        })
                        ->orWhereHas('pendanaan', function ($pendanaanQuery) use ($preferences) {
                            $pendanaanQuery->where('lokasi_pendanaan', 'LIKE', '%' . $preferences->lokasi . '%');
                        })
                        ->orWhereHas('riset', function ($risetQuery) use ($preferences) {
                            $risetQuery->where('lokasi_riset', 'LIKE', '%' . $preferences->lokasi . '%');
                        });
                });
            }

            // Tambahan filter berdasarkan metodologi
            if (!empty($preferences->metodologi)) {
                $query->where(function ($q) use ($preferences) {
                    $q->where('metodologi', 'LIKE', '%' . $preferences->metodologi . '%')
                        ->orWhereHas('riset', function ($risetQuery) use ($preferences) {
                            $risetQuery->where('metodologi', 'LIKE', '%' . $preferences->metodologi . '%');
                        });
                });
            }

            // Tambahan filter berdasarkan rincian kebutuhan
            if (!empty($preferences->rincian_kebutuhan)) {
                $query->where('rincian_kebutuhan', 'LIKE', '%' . $preferences->rincian_kebutuhan . '%');
            }

            // Tambahan filter berdasarkan penerima manfaat
            if (!empty($preferences->penerima_manfaat)) {
                $query->where('penerima_manfaat', 'LIKE', '%' . $preferences->penerima_manfaat . '%');
            }
        }

        // Jalankan query dan ambil hasilnya
        $projects = $query->paginate(6);

        // Tampilkan hasil jika ada proyek yang ditemukan
        if ($projects->isEmpty()) {
            return view('pemerintah.index', ['message' => 'Tidak ada program yang ditemukan.']);
        }

        return view('pemerintah.index', ['projects' => $projects]);
    }










    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     */
    public function show(string $id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(string $id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, string $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(string $id)
    {
        //
    }
}
