<?php

namespace App\Http\Controllers;

use App\Models\Follow;
use App\Models\Pelatihan;
use App\Models\permohonanPelatihan;
use App\Models\permohonanPendanaan;
use App\Models\permohonanProject;
use App\Models\permohonanProyekInvestor;
use App\Models\permohonanRiset;
use App\Models\Pendanaan;
use App\Models\Project;
use App\Models\ProyekInvestor;
use App\Models\Riset;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;

class permohonanProjectController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index()
    {
        // Mengambil pengguna yang sedang login
        $user = auth()->user();

        // Mengambil proyek yang terkait dengan pengguna yang sedang login
        $projects = permohonanProject::where('user_id', $user->id)->get();

        // Mengembalikan tampilan dengan data proyek
        return view('project.index', ['projects' => $projects]);
    }


    // Menampilkan halaman pelatihan
    public function pelatihan(Request $request)
    {
        $search = $request->input('search'); // Ambil parameter pencarian

        // Query dengan pagination dan pencarian
        $projects = PermohonanProject::with('pelatihan')
            ->whereHas('pelatihan', function ($query) use ($search) {
                if ($search) {
                    $query->where('judul_project', 'like', "%{$search}%")
                        ->orWhere('deskripsi_kolaborasi', 'like', "%{$search}%");
                }
            })
            ->paginate(6); // Mengambil 6 proyek per halaman

        return view('project.pelatihan', compact('projects', 'search'));
    }

    // Menampilkan halaman pendanaan
    public function pendanaan(Request $request)
    {
        $search = $request->input('search'); // Ambil parameter pencarian

        // Query dengan pagination dan pencarian
        $projects = PermohonanProject::with('pendanaan')
            ->whereHas('pendanaan', function ($query) use ($search) {
                if ($search) {
                    $query->where('judul_project', 'like', "%{$search}%")
                        ->orWhere('deskripsi_kolaborasi', 'like', "%{$search}%");
                }
            })
            ->paginate(6); // Mengambil 6 proyek per halaman


        return view('project.pendanaan', compact('projects', 'search'));
    }

    // Menampilkan halaman riset
    public function riset(Request $request)
    {
        $search = $request->input('search'); // Ambil parameter pencarian

        // Query dengan pagination dan pencarian
        $projects = PermohonanProject::with('riset')
            ->whereHas('riset', function ($query) use ($search) {
                if ($search) {
                    $query->where('judul_project', 'like', "%{$search}%")
                        ->orWhere('deskripsi_kolaborasi', 'like', "%{$search}%");
                }
            })
            ->paginate(6); // Mengambil 6 proyek per halaman

        return view('project.riset', compact('projects', 'search'));
    }

    // Menampilkan halaman proyek investor
    public function proyekInvestor()
    {
        $projects = permohonanProject::with('proyekInvestor')->whereHas('proyekInvestor')->get();
        return view('project.proyekInvestor', compact('projects'));
    }



    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        return view('project.create');
    }

    /**
     * Store a newly created resource in storage.
     */
    // ProjectController.php
    // public function store(Request $request)
    // {
    //     // Validasi input
    //     $request->validate([
    //         'judul_project' => 'required|string|max:255',
    //         'bidang_sub_sektor_ekonomi_kreatif' => 'required|string|max:255',
    //         'latar_belakang' => 'required|string',
    //         'penerima_manfaat_pengguna_project' => 'required|string',
    //         'solusi_project' => 'required|string',
    //         'parameter_kesuksesan' => 'required|string',
    //         'rincian_kebutuhan' => 'required|string',
    //         'deskripsi_kolaborasi' => 'required|string',
    //         'kata_kunci' => 'required|string|max:255',
    //         'batas_terima_tawaran' => 'required|date',
    //         'tanggal_mulai' => 'required|date',
    //         'tanggal_berakhir' => 'required|date',
    //         'nominal_kebutuhan' => 'required|numeric',
    //         'kategori' => 'required|string|max:255',
    //         'kontak' => 'required|string|max:255',
    //         'dokumen_pendukung' => 'nullable|file|mimes:pdf,doc,docx',
    //         'foto_proyek' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
    //         'checklist_komitmen' => 'required|accepted',
    //         'checklist_persetujuan' => 'required|accepted',
    //     ]);

    //     // Handle file uploads
    //     $dokumen_pendukung = $request->file('dokumen_pendukung')
    //         ? $request->file('dokumen_pendukung')->storeAs('dokumen_pendukung', $request->file('dokumen_pendukung')->getClientOriginalName(), 'public')
    //         : null;

    //     $foto_proyek = $request->file('foto_proyek')
    //         ? $request->file('foto_proyek')->storeAs('foto_proyek', $request->file('foto_proyek')->getClientOriginalName(), 'public')
    //         : null;

    //     // Simpan data ke database
    //     Project::create([
    //         'judul_project' => $request->input('judul_project'),
    //         'bidang_sub_sektor_ekonomi_kreatif' => $request->input('bidang_sub_sektor_ekonomi_kreatif'),
    //         'latar_belakang' => $request->input('latar_belakang'),
    //         'penerima_manfaat_pengguna_project' => $request->input('penerima_manfaat_pengguna_project'),
    //         'solusi_project' => $request->input('solusi_project'),
    //         'parameter_kesuksesan' => $request->input('parameter_kesuksesan'),
    //         'rincian_kebutuhan' => $request->input('rincian_kebutuhan'),
    //         'deskripsi_kolaborasi' => $request->input('deskripsi_kolaborasi'),
    //         'kata_kunci' => $request->input('kata_kunci'),
    //         'batas_terima_tawaran' => $request->input('batas_terima_tawaran'),
    //         'tanggal_mulai' => $request->input('tanggal_mulai'),
    //         'tanggal_berakhir' => $request->input('tanggal_berakhir'),
    //         'nominal_kebutuhan' => $request->input('nominal_kebutuhan'),
    //         'kategori' => $request->input('kategori'),
    //         'kontak' => $request->input('kontak'),
    //         'dokumen_pendukung' => $dokumen_pendukung,
    //         'foto_proyek' => $foto_proyek,
    //         'user_id' => auth()->id(),
    //         'checklist_komitmen' => $request->has('checklist_komitmen'),
    //         'checklist_persetujuan' => $request->has('checklist_persetujuan'),
    //     ]);

    //     return redirect()->route('projects.index')->with('success', 'Project created successfully.');
    // }

    public function store(Request $request)
    {
        // Validasi input
        $rules = [
            'judul_project' => 'required|string|max:255',
            // 'bidang_sub_sektor_ekonomi_kreatif' => 'required|string|max:255',
            'bidang_sub_sektor_ekonomi_kreatif' => 'required|array',
            'bidang_sub_sektor_ekonomi_kreatif.*' => 'string',
            'latar_belakang' => 'required|string',
            'penerima_manfaat_pengguna_project' => 'required|string',
            'solusi_project' => 'required|string',
            'parameter_kesuksesan' => 'required|string',
            'rincian_kebutuhan' => 'required|string',
            'deskripsi_kolaborasi' => 'required|string',
            'kata_kunci' => 'required|string|max:255',
            'batas_terima_tawaran' => 'required|date',
            'tanggal_mulai' => 'required|date',
            'tanggal_berakhir' => 'required|date',
            'kategori' => 'required|string|max:255',
            'kontak' => 'required|string|max:255',
            'dokumen_pendukung' => 'nullable|file|mimes:pdf,doc,docx',
            'foto_proyek' => 'nullable|image|mimes:jpeg,png,jpg',
            'checklist_komitmen' => 'required|accepted',
            'checklist_persetujuan' => 'required|accepted',
        ];

        // Tambahkan validasi dinamis sesuai kategori
        switch ($request->input('kategori')) {
            case 'Pelatihan':
                $rules = array_merge($rules, [
                    'audiens' => 'required|string',
                    'biaya' => 'required|numeric',
                    'jumlah_peserta' => 'required|numeric',
                    'benefit_pelatihan' => 'required|string',
                    'lokasi_pelatihan' => 'required|string',
                    'status_pelatihan' => 'required|string',
                ]);
                break;

            case 'Pendanaan':
                $rules = array_merge($rules, [
                    'jumlah_dana' => 'required|numeric',
                    'lokasi_pendanaan' => 'required|string',
                    'rencana_penggunaan_dana' => 'required|string',
                    'status_pendanaan' => 'required|string',
                    'benefit_pendanaan' => 'required|string',
                ]);
                break;

            case 'Riset':
                $rules = array_merge($rules, [
                    'anggaran' => 'required|numeric',
                    'lokasi_riset' => 'required|string',
                    'metodologi' => 'required|string',
                    'hasil' => 'required|string',
                    'status_riset' => 'required|string',
                    'benefit_riset' => 'required|string',
                ]);
                break;

            case 'Project Investor':
                $rules = array_merge($rules, [
                    'nominal' => 'required|numeric',
                    'rencana_implementasi' => 'required|string',
                    'status_project' => 'required|string',
                    'lokasi_project' => 'required|string',
                    'benefit_project' => 'required|string',
                ]);
                break;
        }

        // $request->validate($rules);
        $validatedData = $request->validate($rules);


        // // Handle file uploads
        // $dokumen_pendukung = $request->file('dokumen_pendukung')
        //     ? $request->file('dokumen_pendukung')->storeAs('dokumen_pendukung', $request->file('dokumen_pendukung')->getClientOriginalName(), 'public')
        //     : null;

        // $foto_proyek = $request->file('foto_proyek')
        //     ? $request->file('foto_proyek')->storeAs('foto_proyek', $request->file('foto_proyek')->getClientOriginalName(), 'public')
        //     : null;

        $foto_proyek_path = null;
        if ($request->hasFile('foto_proyek')) {
            $foto_proyek = $request->file('foto_proyek');
            // Menghasilkan nama file unik dengan timestamp
            $uniquefoto_proyekName = time() . '_' . $foto_proyek->getClientOriginalName();
            $foto_proyek_path = $foto_proyek->storeAs('foto_proyek', $uniquefoto_proyekName, 'public');
        }

        // Handle laporan keuangan upload
        $dokumen_pendukung_path = null; // Inisialisasi path untuk laporan keuangan
        if ($request->hasFile('dokumen_pendukung')) {
            $dokumen_pendukung = $request->file('dokumen_pendukung');
            // Menghasilkan nama file unik untuk laporan keuangan
            $uniqueDokumenPendukungName = time() . '_' . $dokumen_pendukung->getClientOriginalName();
            $dokumen_pendukung_path = $dokumen_pendukung->storeAs('dokumen_pendukung', $uniqueDokumenPendukungName, 'public');
        }



        $bidangSubSektor = $validatedData['bidang_sub_sektor_ekonomi_kreatif'];
        $bidangSubSektorString = implode(',', $bidangSubSektor);

        // Simpan data ke database
        // $project = permohonanProject::create([
        //     'judul_project' => $request->input('judul_project'),
        //     'bidang_sub_sektor_ekonomi_kreatif' => $request->input('bidang_sub_sektor_ekonomi_kreatif'),
        //     'latar_belakang' => $request->input('latar_belakang'),
        //     'penerima_manfaat_pengguna_project' => $request->input('penerima_manfaat_pengguna_project'),
        //     'solusi_project' => $request->input('solusi_project'),
        //     'parameter_kesuksesan' => $request->input('parameter_kesuksesan'),
        //     'rincian_kebutuhan' => $request->input('rincian_kebutuhan'),
        //     'deskripsi_kolaborasi' => $request->input('deskripsi_kolaborasi'),
        //     'kata_kunci' => $request->input('kata_kunci'),
        //     'batas_terima_tawaran' => $request->input('batas_terima_tawaran'),
        //     'tanggal_mulai' => $request->input('tanggal_mulai'),
        //     'tanggal_berakhir' => $request->input('tanggal_berakhir'),
        //     'kategori' => $request->input('kategori'),
        //     'kontak' => $request->input('kontak'),
        //     'dokumen_pendukung' => $dokumen_pendukung,
        //     'foto_proyek' => $foto_proyek,
        //     'user_id' => auth()->id(),
        //     'checklist_komitmen' => $request->input('checklist_komitmen') === 'on',
        //     'checklist_persetujuan' => $request->input('checklist_persetujuan') === 'on',
        // ]);

        $project = permohonanProject::create([
            'judul_project' => $validatedData['judul_project'],
            'bidang_sub_sektor_ekonomi_kreatif' => $bidangSubSektorString,
            'latar_belakang' => $validatedData['latar_belakang'],
            'penerima_manfaat_pengguna_project' => $validatedData['penerima_manfaat_pengguna_project'],
            'solusi_project' => $validatedData['solusi_project'],
            'parameter_kesuksesan' => $validatedData['parameter_kesuksesan'],
            'rincian_kebutuhan' => $validatedData['rincian_kebutuhan'],
            'deskripsi_kolaborasi' => $validatedData['deskripsi_kolaborasi'],
            'kata_kunci' => $validatedData['kata_kunci'],
            'batas_terima_tawaran' => $validatedData['batas_terima_tawaran'],
            'tanggal_mulai' => $validatedData['tanggal_mulai'],
            'tanggal_berakhir' => $validatedData['tanggal_berakhir'],
            'kategori' => $validatedData['kategori'],
            'kontak' => $validatedData['kontak'],
            'dokumen_pendukung' => $dokumen_pendukung_path,
            'foto_proyek' => $foto_proyek_path,
            'user_id' => auth()->id(),
            'checklist_komitmen' => $validatedData['checklist_komitmen'] === 'on',
            'checklist_persetujuan' => $validatedData['checklist_persetujuan'] === 'on',
        ]);

        // Simpan data tambahan berdasarkan kategori
        // switch ($request->input('kategori')) {
        //     case 'Pelatihan':
        //         permohonanPelatihan::create([
        //             'permohonan_project_id' => $project->id,
        //             'audiens' => $request->input('audiens'),
        //             'biaya' => $request->input('biaya'),
        //             'jumlah_peserta' => $request->input('jumlah_peserta'),
        //             'benefit_pelatihan' => $request->input('benefit_pelatihan'),
        //             'lokasi_pelatihan' => $request->input('lokasi_pelatihan'),
        //             'status_pelatihan' => $request->input('status_pelatihan'),
        //         ]);
        //         break;

        //     case 'Pendanaan':
        //         permohonanPendanaan::create([
        //             'permohonan_project_id' => $project->id,
        //             'jumlah_dana' => $request->input('jumlah_dana'),
        //             'lokasi_pendanaan' => $request->input('lokasi_pendanaan'),
        //             'rencana_penggunaan_dana' => $request->input('rencana_penggunaan_dana'),
        //             'status_pendanaan' => $request->input('status_pendanaan'),
        //             'benefit_pendanaan' => $request->input('benefit_pendanaan'),
        //         ]);
        //         break;

        //     case 'Riset':
        //         permohonanRiset::create([
        //             'permohonan_project_id' => $project->id,
        //             'anggaran' => $request->input('anggaran'),
        //             'lokasi_riset' => $request->input('lokasi_riset'),
        //             'metodologi' => $request->input('metodologi'),
        //             'hasil' => $request->input('hasil'),
        //             'status_riset' => $request->input('status_riset'),
        //             'benefit_riset' => $request->input('benefit_riset'),
        //         ]);
        //         break;

        //     case 'Project Investor':
        //         permohonanProyekInvestor::create([
        //             'permohonan_project_id' => $project->id,
        //             'nominal' => $request->input('nominal'),
        //             'rencana_implementasi' => $request->input('rencana_implementasi'),
        //             'status_project' => $request->input('status_project'),
        //             'lokasi_project' => $request->input('lokasi_project'),
        //             'benefit_project' => $request->input('benefit_project'),
        //         ]);
        //         break;
        // }

        switch ($validatedData['kategori']) {
            case 'Pelatihan':
                permohonanPelatihan::create([
                    'permohonan_project_id' => $project->id,
                    'audiens' => $validatedData['audiens'],
                    'biaya' => $validatedData['biaya'],
                    'jumlah_peserta' => $validatedData['jumlah_peserta'],
                    'benefit_pelatihan' => $validatedData['benefit_pelatihan'],
                    'lokasi_pelatihan' => $validatedData['lokasi_pelatihan'],
                    'status_pelatihan' => $validatedData['status_pelatihan'],
                ]);
                break;

            case 'Pendanaan':
                permohonanPendanaan::create([
                    'permohonan_project_id' => $project->id,
                    'jumlah_dana' => $validatedData['jumlah_dana'],
                    'lokasi_pendanaan' => $validatedData['lokasi_pendanaan'],
                    'rencana_penggunaan_dana' => $validatedData['rencana_penggunaan_dana'],
                    'status_pendanaan' => $validatedData['status_pendanaan'],
                    'benefit_pendanaan' => $validatedData['benefit_pendanaan'],
                ]);
                break;

            case 'Riset':
                permohonanRiset::create([
                    'permohonan_project_id' => $project->id,
                    'anggaran' => $validatedData['anggaran'],
                    'lokasi_riset' => $validatedData['lokasi_riset'],
                    'metodologi' => $validatedData['metodologi'],
                    'hasil' => $validatedData['hasil'],
                    'status_riset' => $validatedData['status_riset'],
                    'benefit_riset' => $validatedData['benefit_riset'],
                ]);
                break;

            case 'Project Investor':
                permohonanProyekInvestor::create([
                    'permohonan_project_id' => $project->id,
                    'nominal' => $validatedData['nominal'],
                    'rencana_implementasi' => $validatedData['rencana_implementasi'],
                    'status_project' => $validatedData['status_project'],
                    'lokasi_project' => $validatedData['lokasi_project'],
                    'benefit_project' => $validatedData['benefit_project'],
                ]);
                break;
        }

        return redirect()->route('permohonanprojects.index')->with('success', 'Project created successfully.');
    }



    /**
     * Display the specified resource.
     */
    public function show(string $id)
    {
        // Mencari proyek berdasarkan ID
        $project = permohonanProject::find($id);

        // Jika proyek ditemukan, tampilkan tampilan detail proyek
        if ($project) {
            return view('project.show', compact('project'));
        } else {
            return redirect()->route('permohonanprojects.index')->with('error', 'Project not found');
        }
    }


    public function showPelatihan($id)
    {
        // Find the project by its ID with related pelatihan data
        $project = permohonanProject::with('pelatihan')->findOrFail($id);

        // Mengambil daftar pengikut untuk proyek ini
        $followers = Follow::where('project_id', $id)
            ->where('status', 'accepted') // Hanya pengikut yang diterima
            ->with('user') // Ambil data pengguna yang mengikuti
            ->get();

        // Return the view for Pelatihan with the related pelatihan data
        return view('project.show_pelatihan', compact('project', 'followers'));
    }

    public function showPendanaan($id)
    {
        // Find the project by its ID
        $project = permohonanProject::with('pendanaan')->findOrFail($id);

        // Mengambil daftar pengikut untuk proyek ini
        $followers = Follow::where('project_id', $id)
            ->where('status', 'accepted') // Hanya pengikut yang diterima
            ->with('user') // Ambil data pengguna yang mengikuti
            ->get();

        // Return the view for Pelatihan with the related pelatihan data
        return view('project.show_pendanaan', compact('project', 'followers'));
    }

    public function showRiset($id)
    {
        // Find the project by its ID
        $project = permohonanProject::with('riset')->findOrFail($id);

        // Mengambil daftar pengikut untuk proyek ini
        $followers = Follow::where('project_id', $id)
            ->where('status', 'accepted') // Hanya pengikut yang diterima
            ->with('user') // Ambil data pengguna yang mengikuti
            ->get();

        // Return the view for Pelatihan with the related pelatihan data
        return view('project.show_riset', compact('project', 'followers'));
    }

    public function showProyekInvestor($id)
    {
        // Find the project by its ID
        $project = permohonanProject::with('proyekInvestor')->findOrFail($id);

        // Check if the project has related proyekInvestor data
        if ($project->kategori === 'Project Investor' && $project->proyekInvestor) {
            // Return the view for Proyek Investor with the related proyekInvestor data
            return view('project.show_proyek_investor', compact('project'));
        }

        // If no related proyekInvestor data found, handle it appropriately
        abort(404, 'Proyek Investor data not found for this project.');
    }



    /**
     * Show the form for editing the specified resource.
     */
    // public function edit(string $id)
    // {
    //     $project = Project::find($id); // Mencari proyek berdasarkan ID

    //     if (!$project) {
    //         return redirect()->route('projects.index')->with('error', 'Project not found'); // Mengalihkan ke daftar proyek jika tidak ditemukan
    //     }

    //     return view('project.edit', compact('project'));
    // }



    public function edit($id)
    {
        $project = permohonanProject::find($id);

        if (!$project) {
            return redirect()->route('permohonanprojects.index')->with('error', 'Project not found');
        }

        $relatedData = null;
        switch ($project->kategori) {
            case 'Pelatihan':
                $relatedData = $project->pelatihan;
                break;
            case 'Pendanaan':
                $relatedData = $project->pendanaan;
                break;
            case 'Riset':
                $relatedData = $project->riset;
                break;
            case 'Project Investor':
                $relatedData = $project->proyekInvestor;
                break;
        }

        return view('project.edit', compact('project', 'relatedData'));
    }




    /**
     * Update the specified resource in storage.
     */
    // public function update(Request $request, string $id)
    // {
    //     // Mencari proyek berdasarkan ID
    //     $project = Project::find($id);

    //     // Jika proyek tidak ditemukan, kembalikan pesan error
    //     if (!$project) {
    //         return redirect()->route('projects.index')->with('error', 'Project not found');
    //     }

    //     // Validasi data
    //     $validated = $request->validate([
    //         'judul_project' => 'sometimes|string|max:255',
    //         'bidang_sub_sektor_ekonomi_kreatif' => 'sometimes|string|max:255',
    //         'latar_belakang' => 'sometimes',
    //         'penerima_manfaat_pengguna_project' => 'sometimes',
    //         'solusi_project' => 'sometimes',
    //         'parameter_kesuksesan' => 'sometimes',
    //         'rincian_kebutuhan' => 'sometimes',
    //         'deskripsi_kolaborasi' => 'sometimes',
    //         'kata_kunci' => 'sometimes|string|max:255',
    //         'batas_terima_tawaran' => 'sometimes|date',
    //         'tanggal_mulai' => 'sometimes|date',
    //         'tanggal_berakhir' => 'sometimes|date',
    //         'nominal_kebutuhan' => 'sometimes|numeric',
    //         'kategori' => 'sometimes|string|max:255',
    //         'kontak' => 'sometimes|string|max:255',
    //         'dokumen_pendukung' => 'nullable|file',
    //         'checklist_komitmen' => 'required|accepted',
    //         'checklist_persetujuan' => 'required|accepted',
    //         'foto_proyek' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
    //     ]);

    //     // Menyimpan foto proyek jika ada
    //     if ($request->hasFile('foto_proyek')) {
    //         // Hapus foto lama jika ada
    //         if ($project->foto_proyek) {
    //             Storage::disk('public')->delete($project->foto_proyek);
    //         }
    //         // Simpan foto baru dengan nama asli
    //         $fotoPath = $request->file('foto_proyek')->storeAs('foto_proyek', $request->file('foto_proyek')->getClientOriginalName(), 'public');
    //         $validated['foto_proyek'] = $fotoPath;
    //     }

    //     // Menyimpan dokumen pendukung jika ada
    //     if ($request->hasFile('dokumen_pendukung')) {
    //         // Hapus dokumen lama jika ada
    //         if ($project->dokumen_pendukung) {
    //             Storage::disk('public')->delete($project->dokumen_pendukung);
    //         }
    //         // Simpan dokumen baru dengan nama asli
    //         $dokumenPath = $request->file('dokumen_pendukung')->storeAs('dokumen_pendukung', $request->file('dokumen_pendukung')->getClientOriginalName(), 'public');
    //         $validated['dokumen_pendukung'] = $dokumenPath;
    //     }

    //     // Memperbarui proyek dengan data yang telah divalidasi
    //     $project->update($validated);

    //     // Update data tambahan berdasarkan kategori
    //     if ($project->kategori === 'Pelatihan') {
    //         $pelatihan = Pelatihan::where('project_id', $project->id)->first();
    //         if ($pelatihan) {
    //             $pelatihan->update([
    //                 'audiens' => $request->input('audiens'),
    //                 'biaya' => $request->input('biaya'),
    //                 'jumlah_peserta' => $request->input('jumlah_peserta'),
    //                 'benefit_pelatihan' => $request->input('benefit_pelatihan'),
    //                 'lokasi_pelatihan' => $request->input('lokasi_pelatihan'),
    //                 'status_pelatihan' => $request->input('status_pelatihan'),
    //             ]);
    //         }
    //     } elseif ($project->kategori === 'Pendanaan') {
    //         $pendanaan = Pendanaan::where('project_id', $project->id)->first();
    //         if ($pendanaan) {
    //             $pendanaan->update([
    //                 'jumlah_dana' => $request->input('jumlah_dana'),
    //                 'lokasi_pendanaan' => $request->input('lokasi_pendanaan'),
    //                 'rencana_penggunaan_dana' => $request->input('rencana_penggunaan_dana'),
    //                 'status_pendanaan' => $request->input('status_pendanaan'),
    //                 'benefit_pendanaan' => $request->input('benefit_pendanaan'),
    //             ]);
    //         }
    //     } elseif ($project->kategori === 'Riset') {
    //         $riset = Riset::where('project_id', $project->id)->first();
    //         if ($riset) {
    //             $riset->update([
    //                 'anggaran' => $request->input('anggaran'),
    //                 'lokasi_riset' => $request->input('lokasi_riset'),
    //                 'metodologi' => $request->input('metodologi'),
    //                 'hasil' => $request->input('hasil'),
    //                 'status_riset' => $request->input('status_riset'),
    //                 'benefit_riset' => $request->input('benefit_riset'),
    //             ]);
    //         }
    //     } elseif ($project->kategori === 'Project Investor') {
    //         $projectInvestorDetails = ProyekInvestor::where('project_id', $project->id)->first();
    //         if ($projectInvestorDetails) {
    //             $projectInvestorDetails->update([
    //                 'nominal' => $request->input('nominal'),
    //                 'rencana_implementasi' => $request->input('rencana_implementasi'),
    //                 'status_project' => $request->input('status_project'),
    //                 'benefit_project' => $request->input('benefit_project'),
    //             ]);
    //         }
    //     }

    //     // Redirect ke halaman daftar proyek dengan pesan sukses
    //     return redirect()->route('projects.index')->with('success', 'Project updated successfully.');
    // }

    public function update(Request $request, $id)
    {
        // Find the project by ID
        $project = permohonanProject::find($id);

        // If the project is not found, redirect with an error message
        if (!$project) {
            return redirect()->route('permohonanprojects.index')->with('error', 'Project not found');
        }

        // Define base validation rules
        $rules = [
            'judul_project' => 'sometimes|string|max:255',
            // 'bidang_sub_sektor_ekonomi_kreatif' => 'sometimes|string|max:255',
            'bidang_sub_sektor_ekonomi_kreatif' => 'required|array',
            'bidang_sub_sektor_ekonomi_kreatif.*' => 'string',
            'latar_belakang' => 'sometimes|string',
            'penerima_manfaat_pengguna_project' => 'sometimes|string',
            'solusi_project' => 'sometimes|string',
            'parameter_kesuksesan' => 'sometimes|string',
            'rincian_kebutuhan' => 'sometimes|string',
            'deskripsi_kolaborasi' => 'sometimes|string',
            'kata_kunci' => 'sometimes|string|max:255',
            'batas_terima_tawaran' => 'sometimes|date',
            'tanggal_mulai' => 'sometimes|date',
            'tanggal_berakhir' => 'sometimes|date',
            'kategori' => 'sometimes|string|max:255',
            'kontak' => 'sometimes|string|max:255',
            'dokumen_pendukung' => 'nullable|file|mimes:pdf,doc,docx',
            'foto_proyek' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
            'checklist_komitmen' => 'sometimes|accepted',
            'checklist_persetujuan' => 'sometimes|accepted',
        ];

        // Dynamic validation rules based on the category
        switch ($request->input('kategori', $project->kategori)) {
            case 'Pelatihan':
                $rules = array_merge($rules, [
                    'audiens' => 'sometimes|string',
                    'biaya' => 'sometimes|numeric',
                    'jumlah_peserta' => 'sometimes|numeric',
                    'benefit_pelatihan' => 'sometimes|string',
                    'lokasi_pelatihan' => 'sometimes|string',
                    'status_pelatihan' => 'sometimes|string',
                ]);
                break;

            case 'Pendanaan':
                $rules = array_merge($rules, [
                    'jumlah_dana' => 'sometimes|numeric',
                    'lokasi_pendanaan' => 'sometimes|string',
                    'rencana_penggunaan_dana' => 'sometimes|string',
                    'status_pendanaan' => 'sometimes|string',
                    'benefit_pendanaan' => 'sometimes|string',
                ]);
                break;

            case 'Riset':
                $rules = array_merge($rules, [
                    'anggaran' => 'sometimes|numeric',
                    'lokasi_riset' => 'sometimes|string',
                    'metodologi' => 'sometimes|string',
                    'hasil' => 'sometimes|string',
                    'status_riset' => 'sometimes|string',
                    'benefit_riset' => 'sometimes|string',
                ]);
                break;

            case 'Project Investor':
                $rules = array_merge($rules, [
                    'nominal' => 'sometimes|numeric',
                    'rencana_implementasi' => 'sometimes|string',
                    'status_project' => 'sometimes|string',
                    'lokasi_project' => 'sometimes|string',
                    'benefit_project' => 'sometimes|string',
                ]);
                break;
        }

        // Validate the request data
        $validatedData = $request->validate($rules);

        // Mengubah array bidang_sub_sektor_ekonomi_kreatif menjadi string
        $validatedData['bidang_sub_sektor_ekonomi_kreatif'] = implode(',', $validatedData['bidang_sub_sektor_ekonomi_kreatif']);

        // // Handle file uploads
        // if ($request->hasFile('dokumen_pendukung')) {
        //     $validatedData['dokumen_pendukung'] = $request->file('dokumen_pendukung')
        //         ? $request->file('dokumen_pendukung')->storeAs('dokumen_pendukung', $request->file('dokumen_pendukung')->getClientOriginalName(), 'public')
        //         : $project->dokumen_pendukung;
        // }

        // if ($request->hasFile('foto_proyek')) {
        //     $validatedData['foto_proyek'] = $request->file('foto_proyek')
        //         ? $request->file('foto_proyek')->storeAs('foto_proyek', $request->file('foto_proyek')->getClientOriginalName(), 'public')
        //         : $project->foto_proyek;
        // }

        // Handle file uploads
        if ($request->hasFile('dokumen_pendukung')) {
            $dokumen_pendukung = $request->file('dokumen_pendukung');
            // Menghasilkan nama file unik
            $uniqueDokumenPendukungName = time() . '_' . uniqid() . '_' . $dokumen_pendukung->getClientOriginalName();
            $validatedData['dokumen_pendukung'] = $dokumen_pendukung->storeAs('dokumen_pendukung', $uniqueDokumenPendukungName, 'public');
        } else {
            $validatedData['dokumen_pendukung'] = $project->dokumen_pendukung; // Keep existing dokumen if not uploaded
        }

        if ($request->hasFile('foto_proyek')) {
            $foto_proyek = $request->file('foto_proyek');
            // Menghasilkan nama file unik
            $uniqueFotoProyekName = time() . '_' . uniqid() . '_' . $foto_proyek->getClientOriginalName();
            $validatedData['foto_proyek'] = $foto_proyek->storeAs('foto_proyek', $uniqueFotoProyekName, 'public');
        } else {
            $validatedData['foto_proyek'] = $project->foto_proyek; // Keep existing foto if not uploaded
        }



        // Update the main project data
        $project->update($validatedData);

        // Update or create related records based on the category
        switch ($request->input('kategori', $project->kategori)) {
            case 'Pelatihan':
                $project->pelatihan()->updateOrCreate(
                    ['permohonan_project_id' => $project->id],
                    $request->only([
                        'audiens',
                        'biaya',
                        'jumlah_peserta',
                        'benefit_pelatihan',
                        'lokasi_pelatihan',
                        'status_pelatihan'
                    ])
                );
                break;

            case 'Pendanaan':
                $project->pendanaan()->updateOrCreate(
                    ['permohonan_project_id' => $project->id],
                    $request->only([
                        'jumlah_dana',
                        'lokasi_pendanaan',
                        'rencana_penggunaan_dana',
                        'status_pendanaan',
                        'benefit_pendanaan'
                    ])
                );
                break;

            case 'Riset':
                $project->riset()->updateOrCreate(
                    ['permohonan_project_id' => $project->id],
                    $request->only([
                        'anggaran',
                        'lokasi_riset',
                        'metodologi',
                        'hasil',
                        'status_riset',
                        'benefit_riset'
                    ])
                );
                break;

            case 'Project Investor':
                $project->proyekInvestor()->updateOrCreate(
                    ['permohonan_project_id' => $project->id],
                    $request->only([
                        'nominal',
                        'rencana_implementasi',
                        'status_project',
                        'benefit_project'
                    ])
                );
                break;
        }

        return redirect()->route('permohonanprojects.index')->with('success', 'Project updated successfully.');
    }




    /**
     * Remove the specified resource from storage.
     */
    public function destroy(string $id)
    {
        try {
            // Mencari proyek berdasarkan ID dan akan melemparkan pengecualian jika tidak ditemukan
            $project = permohonanProject::findOrFail($id);

            // Menghapus proyek dari database
            $project->delete();

            // Mengarahkan pengguna ke halaman daftar proyek dengan pesan sukses
            return redirect()->route('permohonanprojects.index')->with('success', 'Project deleted successfully');
        } catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) {
            // Mengarahkan pengguna ke halaman daftar proyek dengan pesan error
            return redirect()->route('permohonanprojects.index')->with('error', 'Project not found');
        } catch (\Exception $e) {
            // Mengarahkan pengguna ke halaman daftar proyek dengan pesan error
            return redirect()->route('permohonanprojects.index')->with('error', 'An error occurred');
        }
    }
}
