<?php

namespace App\Http\Controllers;

use App\Models\Penyakit;
use App\Models\Rule;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Redirect;

class PenyakitController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $numtab = 1;
        $penyakit = Penyakit::latest()->get();
        return view('server-side.pages.manajemen-data.penyakit.data', compact([
            'numtab', 'penyakit'
        ]));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        $penyakitId = (new Penyakit())->generateId();
        return view('server-side.pages.manajemen-data.penyakit.create', compact('penyakitId'));
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $request->validate([
            'penyakit' => ['required'],
            'deskripsi' => ['required'],
            'solusi' => ['required'],
        ]);
        Penyakit::create($request->all());
        return Redirect::route('penyakit.index')->with('message', 'Berhasil menambah data penyakit baru');
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\Penyakit  $penyakit
     * @return \Illuminate\Http\Response
     */
    public function show(Penyakit $penyakit)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\Penyakit  $penyakit
     * @return \Illuminate\Http\Response
     */
    public function edit(Penyakit $penyakit)
    {
        return view('server-side.pages.manajemen-data.penyakit.edit', compact('penyakit'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\Penyakit  $penyakit
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Penyakit $penyakit)
    {
        $request->validate([
            'penyakit' => ['required'],
            'deskripsi' => ['required'],
            'solusi' => ['required'],
        ]);
        Penyakit::find($penyakit->penyakitId)->update($request->all());
        return Redirect::route('penyakit.index')->with('message', 'Berhasil melakukan perubahan pada data penyakit yang dipilih');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\Penyakit  $penyakit
     * @return \Illuminate\Http\Response
     */
    public function destroy(Penyakit $penyakit)
    {
        $gejalaIds = Rule::where('penyakitId', $penyakit->penyakitId)->pluck('gejalaId')->unique();
        $penyakit->delete();

        foreach ($gejalaIds as $gejalaId) {
            $rules = Rule::where('gejalaId', $gejalaId)->get();
            $totalNilaiPakar = $rules->sum('nilaiPakar');
            $jumlahGejala = $rules->count();

            $belief = $jumlahGejala > 0 ? $totalNilaiPakar / $jumlahGejala : 0;
            Rule::where('gejalaId', $gejalaId)->update(['belief' => $belief]);
        }

        return Redirect::route('penyakit.index')->with('message', 'Berhasil menghapus data penyakit yang dipilih');
    }
}
