<?php

namespace App\Http\Controllers;

use App\Models\PenawaranProject;
use App\Models\permohonanProject;
use App\Models\Preference;
use App\Models\PreferencesPermohonan;
use App\Models\Project;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class KomunitasController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    // public function index(Request $request)
    // {
    //     // Mendapatkan peran pengguna yang terautentikasi
    //     $userRole = Auth::user()->role;

    //     // Menentukan kategori yang diizinkan berdasarkan peran pengguna
    //     $allowedCategories = [];

    //     switch ($userRole) {
    //         case 'umkm':
    //             $allowedCategories = ['Riset', 'Pelatihan', 'Project Investor'];
    //             break;
    //         case 'akademisi':
    //             $allowedCategories = ['Pelatihan'];
    //             break;
    //         case 'komunitas':
    //             $allowedCategories = ['Pelatihan'];
    //             break;
    //         case 'pemerintah':
    //             $allowedCategories = ['Pendanaan', 'Pelatihan'];
    //             break;
    //         case 'investor':
    //             $allowedCategories = ['Pendanaan', 'Pelatihan'];
    //             break;
    //         default:
    //             $allowedCategories = [];
    //     }

    //     // Query builder untuk proyek
    //     $query = Project::query();

    //     // Menambahkan filter kategori jika kategori yang diizinkan ditentukan
    //     if (!empty($allowedCategories)) {
    //         $query->whereIn('kategori', $allowedCategories);
    //     }

    //     // Menambahkan filter jika ada parameter
    //     if ($request->has('judul_project') && $request->input('judul_project') != '') {
    //         $query->where('judul_project', 'like', '%' . $request->input('judul_project') . '%');
    //     }

    //     if ($request->has('bidang') && $request->input('bidang') != '') {
    //         $query->where('bidang_sub_sektor_ekonomi_kreatif', 'like', '%' . $request->input('bidang') . '%');
    //     }

    //     if ($request->has('tanggal_mulai') && $request->input('tanggal_mulai') != '') {
    //         $query->whereDate('tanggal_mulai', '>=', $request->input('tanggal_mulai'));
    //     }

    //     if ($request->has('tanggal_berakhir') && $request->input('tanggal_berakhir') != '') {
    //         $query->whereDate('tanggal_berakhir', '<=', $request->input('tanggal_berakhir'));
    //     }

    //     if ($request->has('kategori') && $request->input('kategori') != '') {
    //         $query->where('kategori', $request->input('kategori'));
    //     }

    //     if ($request->has('batas_terima_tawaran') && $request->input('batas_terima_tawaran') != '') {
    //         $query->whereDate('batas_terima_tawaran', '<=', $request->input('batas_terima_tawaran'));
    //     }

    //     // Mengambil proyek yang sudah difilter
    //     $projects = $query->get();
    //     return view('komunitas.index', ['projects' => $projects]);
    // }

    // public function index(Request $request)
    // {
    //     // Mendapatkan peran pengguna yang terautentikasi
    //     $userRole = Auth::user()->role;

    //     // Menentukan kategori yang diizinkan berdasarkan peran pengguna
    //     $allowedCategories = [];

    //     switch ($userRole) {
    //         case 'umkm':
    //             $allowedCategories = ['Riset', 'Pelatihan', 'Project Investor'];
    //             break;
    //         case 'akademisi':
    //             $allowedCategories = ['Pelatihan'];
    //             break;
    //         case 'komunitas':
    //             $allowedCategories = ['riset', 'pelatihan', 'pendanaan'];
    //             break;
    //         case 'pemerintah':
    //             $allowedCategories = ['Pendanaan', 'Pelatihan'];
    //             break;
    //         case 'investor':
    //             $allowedCategories = ['Pendanaan', 'Pelatihan'];
    //             break;
    //         default:
    //             $allowedCategories = [];
    //     }

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

    //     // Filter hanya proyek yang sesuai dengan kategori yang diizinkan jika ada
    //     if (!empty($allowedCategories)) {
    //         $query->whereIn('jenis_penawaran', $allowedCategories);
    //     }

    //     // Filter berdasarkan bidang sub sektor ekonomi kreatif jika diberikan
    //     if ($request->has('bidang_sub_sektor_ekonomi_kreatif') && !empty($request->input('bidang_sub_sektor_ekonomi_kreatif'))) {
    //         $query->whereIn('bidang_sub_sektor_ekonomi_kreatif', $request->input('bidang_sub_sektor_ekonomi_kreatif'));
    //     }

    //     // Filter berdasarkan kategori jika diberikan
    //     if ($request->has('jenis_penawaran') && !empty($request->input('jenis_penawaran'))) {
    //         $query->whereIn('jenis_penawaran', $request->input('jenis_penawaran'));
    //     }

    //     // Filter berdasarkan batas terima tawaran jika diberikan
    //     if ($request->has('batas_terima_tawaran') && !empty($request->input('batas_terima_tawaran'))) {
    //         $query->where('batas_terima_tawaran', $request->input('batas_terima_tawaran'));
    //     }

    //     // Filter berdasarkan status jika diberikan
    //     // if ($request->has('status') && !empty($request->input('status'))) {
    //     //     $status = $request->input('status');
    //     //     $query->whereHas('pelatihan', function ($subQuery) use ($status) {
    //     //         $subQuery->where('status_pelatihan', $status);
    //     //     })->orWhereHas('pendanaan', function ($subQuery) use ($status) {
    //     //         $subQuery->where('status_pendanaan', $status);
    //     //     });
    //     // }

    //     if ($request->has('status') && !empty($request->input('status'))) {
    //         $query->where('status', $request->input('status'));
    //     }
    //     // Mengambil proyek sesuai dengan filter yang diterapkan
    //     // Jika tidak ada filter yang diterapkan, ambil semua proyek
    //     $projects = $query->get();


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

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

    //     // Inisialisasi query untuk proyek
    //     $query = PenawaranProject::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('jenis_penawaran', $kategoriPreferences);
    //             } else {
    //                 return view('komunitas.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('komunitas.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->whereIn('status', $statusPreferences);
    //             } else {
    //                 return view('komunitas.index', ['message' => 'Data Not Found: Status tidak valid.']);
    //             }
    //         }
    //     } else {
    //         return view('komunitas.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('komunitas.index', ['message' => 'Data Not Found: Tidak ada proyek yang ditemukan.']);
    //     }

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

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

        // Inisialisasi query untuk proyek
        $query = PenawaranProject::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('jenis_penawaran', $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', '<=', $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('pendanaan', function ($query) use ($rangeMin, $rangeMax) {
                        $query->whereBetween('jumlah_dana', [$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->whereIn('status', $statusPreferences);
                }
            }

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

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

            // Tambahan filter berdasarkan durasi
            if (isset($preferences->durasi_min, $preferences->durasi_max)) {
                $query->whereHas('pelatihan', function ($pelatihanQuery) use ($preferences) {
                    // Filter durasi pelatihan
                    $pelatihanQuery->whereBetween('durasi_pelatihan', [$preferences->durasi_min, $preferences->durasi_max]);
                });
            }

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


            // Tambahan filter berdasarkan metodologi
            if (!empty($preferences->metodologi)) {
                // Filter berdasarkan metodologi pada tabel utama atau relasi riset
                $query->where(function ($q) use ($preferences) {
                    $q->whereHas('riset', function ($risetQuery) use ($preferences) {
                        // Filter metodologi di dalam tabel relasi riset
                        $risetQuery->where('metodologi', 'LIKE', '%' . $preferences->metodologi . '%');
                    });
                });
            }
        } else {
            return view('komunitas.index', ['message' => 'Data Rekomendasi tidak ditemukan. Silahkan perbarui preferensi anda di profil']);
        }

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

        // Cek jika proyek ditemukan
        if ($projects->isEmpty()) {
            return view('komunitas.index', ['message' => 'Data Rekomendasi tidak ditemukan. Silahkan perbarui preferensi anda di profil']);
        }

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

    public function search(Request $request)
    {
        // Ambil input pencarian dari request
        $search = $request->input('search');
    
        // Inisialisasi query untuk proyek
        $query = PenawaranProject::query();
    
        // Filter proyek berdasarkan input pencarian jika ada
        if (!empty($search)) {
            $query->where(function ($q) use ($search) {
                $q->where('judul_project', 'LIKE', '%' . $search . '%')
                    ->orWhere('benefit', 'LIKE', '%' . $search . '%')
                    ->orWhere('deskripsi_project', 'LIKE', '%' . $search . '%');
            });
        }
    
        // Mengambil preferensi pengguna
        $preferences = Preference::where('user_id', Auth::id())->first();
    
        // Memastikan preferensi ada sebelum melakukan filtering
        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('jenis_penawaran', $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->whereHas('pendanaan', function ($pendanaanQuery) use ($rangeMin, $rangeMax) {
                    $pendanaanQuery->whereBetween('jumlah_dana', [$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->whereIn('status', $statusPreferences);
                }
            }
    
            // Filter berdasarkan audiens
            if (!empty($preferences->audiens)) {
                $query->where('audiens', 'LIKE', '%' . $preferences->audiens . '%');
            }
    
            // Filter berdasarkan benefit
            if (!empty($preferences->benefit)) {
                $query->where('benefit', 'LIKE', '%' . $preferences->benefit . '%');
            }
    
            // Filter berdasarkan durasi
            if (isset($preferences->durasi_min, $preferences->durasi_max)) {
                $query->whereHas('pelatihan', function ($pelatihanQuery) use ($preferences) {
                    $pelatihanQuery->whereBetween('durasi_pelatihan', [$preferences->durasi_min, $preferences->durasi_max]);
                });
            }
    
            // 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('riset', function ($risetQuery) use ($preferences) {
                            $risetQuery->where('lokasi_riset', 'LIKE', '%' . $preferences->lokasi . '%');
                        });
                });
            }
    
            // Filter berdasarkan metodologi
            if (!empty($preferences->metodologi)) {
                $query->whereHas('riset', function ($risetQuery) use ($preferences) {
                    $risetQuery->where('metodologi', 'LIKE', '%' . $preferences->metodologi . '%');
                });
            }
        }
    
        // Jalankan query dan ambil hasilnya
        $projects = $query->paginate(6);
    
        // Tampilkan hasil jika ada proyek yang ditemukan
        if ($projects->isEmpty()) {
            return view('komunitas.index', ['message' => 'Tidak ada program yang ditemukan.']);
        }
    
        return view('komunitas.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)
    {
        //
    }
}
