<?php

namespace App\Http\Controllers;

use App\Models\FollowPenawaran;
use App\Models\PenawaranProject;
use App\Models\PenawaranPelatihan;
use App\Models\PenawaranPendanaan;
use App\Models\PenawaranRiset;
use Illuminate\Http\Request;

class PenawaranProjectController extends Controller
{
    // Menampilkan semua penawaran projects
    public function index()
    {
        $user = auth()->user();
        $penawaranProjects = PenawaranProject::with(['Pelatihan', 'Pendanaan', 'Riset'])->where('user_id', $user->id)->get();
        return view('penawaran.index', compact('penawaranProjects'));
    }

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

        // Query untuk pelatihan dengan whereHas dan pencarian berdasarkan judul atau deskripsi
        $projects = PenawaranProject::with('pelatihan')
            ->whereHas('pelatihan', function ($query) use ($search) {
                if ($search) {
                    $query->where('judul_project', 'like', "%{$search}%")
                        ->orWhere('deskripsi_project', 'like', "%{$search}%");
                }
            })
            ->paginate(10); // Set pagination dengan 10 item per halaman

        // Passing variabel 'projects' dan 'search' ke view
        return view('penawaran.pelatihan', compact('projects', 'search'));
    }

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

        // Query untuk pendanaan dengan whereHas dan pencarian berdasarkan judul atau deskripsi
        $projects = PenawaranProject::with('pendanaan')
            ->whereHas('pendanaan', function ($query) use ($search) {
                if ($search) {
                    $query->where('judul_project', 'like', "%{$search}%")
                        ->orWhere('deskripsi_project', 'like', "%{$search}%");
                }
            })
            ->paginate(10); // Pagination 10 item per halaman

        // Passing variabel 'projects' dan 'search' ke view
        return view('penawaran.pendanaan', compact('projects', 'search'));
    }


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

        // Query untuk riset dengan whereHas dan pencarian berdasarkan judul atau deskripsi
        $projects = PenawaranProject::with('riset')
            ->whereHas('riset', function ($query) use ($search) {
                if ($search) {
                    $query->where('judul_project', 'like', "%{$search}%")
                        ->orWhere('deskripsi_project', 'like', "%{$search}%");
                }
            })
            ->paginate(10); // Pagination 10 item per halaman

        // Passing variabel 'projects' dan 'search' ke view
        return view('penawaran.riset', compact('projects', 'search'));
    }

    // Menampilkan form untuk menambah penawaran project baru
    public function create()
    {
        return view('penawaran.create');
    }

    // Menyimpan penawaran project baru
    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',
            'deskripsi_project' => 'required|string',
            'jenis_penawaran' => 'required|in:pelatihan,pendanaan,riset',
            'audiens' => 'required|string',
            'batas_terima_tawaran' => 'required|date',
            'kontak' => 'required|string|max:255',
            'foto_proyek' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
            'status' => 'required|string',
            'benefit' => 'required|string',
        ];

        // Validasi input berdasarkan kategori (jenis_penawaran)
        switch ($request->input('jenis_penawaran')) {
            case 'pelatihan':
                $rules = array_merge($rules, [
                    'lokasi_pelatihan' => 'required|string',
                    'durasi_pelatihan' => 'required|numeric',
                    'jumlah_peserta' => 'required|numeric',
                ]);
                break;

            case 'pendanaan':
                $rules = array_merge($rules, [
                    'jumlah_dana' => 'required|numeric',
                ]);
                break;

            case 'riset':
                $rules = array_merge($rules, [
                    'institusi_penelitian' => 'required|string',
                    'bidang_penelitian' => 'required|string',
                    'lokasi_riset' => 'required|string',
                    'metodologi' => 'required|string',
                    'hasil' => 'required|string',
                ]);
                break;
        }

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

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

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

        // $project = PenawaranProject::create([
        //     'judul_project' => $request->input('judul_project'),
        //     // 'bidang_sub_sektor_ekonomi_kreatif' => $request->input('bidang_sub_sektor_ekonomi_kreatif'),
        //     'bidang_sub_sektor_ekonomi_kreatif' => $request->input['bidang_sub_sektor_ekonomi_kreatif'],
        //     'bidang_sub_sektor_ekonomi_kreatif' => implode(',', $request->input['bidang_sub_sektor_ekonomi_kreatif']), // Simpan sebagai string
        //     'deskripsi_project' => $request->input('deskripsi_project'),
        //     'batas_terima_tawaran' => $request->input('batas_terima_tawaran'),
        //     'jenis_penawaran' => $request->input('jenis_penawaran'),
        //     'audiens' => $request->input('audiens'),
        //     'kontak' => $request->input('kontak'),
        //     'status' => $request->input('status'),
        //     'benefit' => $request->input('benefit'),
        //     'foto_proyek' => $foto_proyek,
        //     'user_id' => auth()->id(),
        // ]);

        $project = PenawaranProject::create([
            'judul_project' => $validatedData['judul_project'],
            'bidang_sub_sektor_ekonomi_kreatif' => $bidangSubSektorString, // Simpan sebagai string
            'deskripsi_project' => $validatedData['deskripsi_project'],
            'batas_terima_tawaran' => $validatedData['batas_terima_tawaran'],
            'jenis_penawaran' => $validatedData['jenis_penawaran'],
            'audiens' => $validatedData['audiens'],
            'kontak' => $validatedData['kontak'],
            'status' => $validatedData['status'],
            'benefit' => $validatedData['benefit'],
            'foto_proyek' => $foto_proyek,
            'user_id' => auth()->id(),
        ]);



        // Simpan data tambahan berdasarkan jenis_penawaran
        // switch ($request->input('jenis_penawaran')) {
        //     case 'pelatihan':
        //         PenawaranPelatihan::create([
        //             'penawaran_project_id' => $project->id,
        //             'lokasi_pelatihan' => $request->input('lokasi_pelatihan'),
        //             'durasi_pelatihan' => $request->input('durasi_pelatihan'),
        //             'jumlah_peserta' => $request->input('jumlah_peserta'),
        //         ]);
        //         break;

        //     case 'pendanaan':
        //         PenawaranPendanaan::create([
        //             'penawaran_project_id' => $project->id,
        //             'jumlah_dana' => $request->input('jumlah_dana'),
        //         ]);
        //         break;

        //     case 'riset':
        //         PenawaranRiset::create([
        //             'penawaran_project_id' => $project->id,
        //             'institusi_penelitian' => $request->input('institusi_penelitian'),
        //             'bidang_penelitian' => $request->input('bidang_penelitian'),
        //             'lokasi_riset' => $request->input('lokasi_riset'),
        //             'metodologi' => $request->input('metodologi'),
        //             'hasil' => $request->input('hasil'),
        //         ]);
        //         break;
        // }

        // Simpan data tambahan berdasarkan jenis_penawaran
        switch ($validatedData['jenis_penawaran']) {
            case 'pelatihan':
                PenawaranPelatihan::create([
                    'penawaran_project_id' => $project->id,
                    'lokasi_pelatihan' => $validatedData['lokasi_pelatihan'],
                    'durasi_pelatihan' => $validatedData['durasi_pelatihan'],
                    'jumlah_peserta' => $validatedData['jumlah_peserta'],
                ]);
                break;

            case 'pendanaan':
                PenawaranPendanaan::create([
                    'penawaran_project_id' => $project->id,
                    'jumlah_dana' => $validatedData['jumlah_dana'],
                ]);
                break;

            case 'riset':
                PenawaranRiset::create([
                    'penawaran_project_id' => $project->id,
                    'institusi_penelitian' => $validatedData['institusi_penelitian'],
                    'bidang_penelitian' => $validatedData['bidang_penelitian'],
                    'lokasi_riset' => $validatedData['lokasi_riset'],
                    'metodologi' => $validatedData['metodologi'],
                    'hasil' => $validatedData['hasil'],
                ]);
                break;
        }

        return redirect()->route('penawaranprojects.index')->with('success', 'Penawaran project berhasil ditambahkan.');
    }


    // Menampilkan form untuk mengedit penawaran project
    public function edit($id)
    {
        $project = PenawaranProject::find($id);

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

        $relatedData = null;
        switch ($project->jenis_penawaran) {
            case 'pelatihan':
                $relatedData = $project->pelatihan;
                break;
            case 'pendanaan':
                $relatedData = $project->pendanaan;
                break;
            case 'riset':
                $relatedData = $project->riset;
                break;
        }

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


    // Memperbarui penawaran project yang sudah ada
    public function update(Request $request,  $id)
    {

        // Find the project by ID
        $project = PenawaranProject::find($id);

        // If the project is not found, redirect with an error message
        if (!$project) {
            return redirect()->route('penawaranprojects.index')->with('error', 'Project not found');
        }
        // 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',
            'deskripsi_project' => 'required|string',
            'jenis_penawaran' => 'required|in:pelatihan,pendanaan,riset',
            'audiens' => 'required|string',
            'batas_terima_tawaran' => 'required|date',
            'kontak' => 'required|string|max:255',
            'foto_proyek' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
            'status' => 'required|string',
            'benefit' => 'required|string',
        ];

        // Validasi input berdasarkan kategori (jenis_penawaran)
        switch ($request->input('jenis_penawaran', $project->jenis_penawaran)) {
            case 'pelatihan':
                $rules = array_merge($rules, [
                    'lokasi_pelatihan' => 'required|string',
                    'durasi_pelatihan' => 'required|numeric',
                    'jumlah_peserta' => 'required|numeric',
                ]);
                break;

            case 'pendanaan':
                $rules = array_merge($rules, [
                    'jumlah_dana' => 'required|numeric',
                ]);
                break;

            case 'riset':
                $rules = array_merge($rules, [
                    'institusi_penelitian' => 'required|string',
                    'bidang_penelitian' => 'required|string',
                    'lokasi_riset' => 'required|string',
                    'metodologi' => 'required|string',
                    'hasil' => 'required|string',
                ]);
                break;
        }

        // Validasi data input
        $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']);

        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;
        }

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

        // Update atau simpan data tambahan berdasarkan jenis_penawaran
        switch ($request->input('jenis_penawaran', $project->jenis_penawaran)) {
            case 'pelatihan':
                $project->Pelatihan()->updateOrCreate(
                    ['penawaran_project_id' => $project->id],
                    [
                        'lokasi_pelatihan' => $request->input('lokasi_pelatihan'),
                        'durasi_pelatihan' => $request->input('durasi_pelatihan'),
                        'jumlah_peserta' => $request->input('jumlah_peserta'),
                    ]
                );
                break;

            case 'pendanaan':
                $project->Pendanaan()->updateOrCreate(
                    ['penawaran_project_id' => $project->id],
                    [
                        'jumlah_dana' => $request->input('jumlah_dana'),
                    ]
                );
                break;

            case 'riset':
                $project->Riset()->updateOrCreate(
                    ['penawaran_project_id' => $project->id],
                    [
                        'institusi_penelitian' => $request->input('institusi_penelitian'),
                        'bidang_penelitian' => $request->input('bidang_penelitian'),
                        'lokasi_riset' => $request->input('lokasi_riset'),
                        'metodologi' => $request->input('metodologi'),
                        'hasil' => $request->input('hasil'),
                    ]
                );
                break;
        }

        return redirect()->route('penawaranprojects.index')->with('success', 'Penawaran project berhasil diperbarui.');
    }


    // Menghapus penawaran project
    public function destroy($id)
    {
        $penawaranProject = PenawaranProject::findOrFail($id);
        $penawaranProject->delete();

        return redirect()->route('penawaranprojects.index')->with('success', 'Penawaran project berhasil dihapus.');
    }

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

        // Mengambil daftar pengikut untuk proyek ini
        $followers = FollowPenawaran::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('penawaran.show_pelatihan', compact('project', 'followers'));
    }

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

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


        return view('penawaran.show_pendanaan', compact('project', 'followers'));
    }

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

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

        return view('penawaran.show_riset', compact('project', 'followers'));
    }
}
