<?php

namespace Modules\Internal\Http\Controllers\Api;

use App\Helpers\Helper;
use App\Models\CorporateFormularium;
use App\Models\Formularium;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\Internal\Transformers\CorporateFormulariumResource;

class CorporateFormulariumController extends Controller
{
    /**
     * Display a listing of the resource.
     * @return Renderable
     */
    public function index(Request $request, $corporate_id)
    {
        $formulariums = Formularium::query()
                ->filter($request->all());
        if (!empty($request->status) && $request->status == 'inactive') {
            $formulariums = $formulariums->whereDoesntHave('corporateFormulariums');
        } else if (!empty($request->status) && $request->status == 'all') {

        } else { // Active or Default
            $formulariums->whereHas('corporateFormulariums', function ($corporateFormularium) use ($corporate_id){
                $corporateFormularium->where('corporate_id', $corporate_id);
            });
        }
        $formulariums = $formulariums->with(['corporateFormulariums' => function ($query) use ($corporate_id) {
                    $query->where('corporate_id', $corporate_id);
                }])
                ->withCount('items')
                ->paginate();

        return Helper::paginateResources(CorporateFormulariumResource::collection($formulariums));
    }

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

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

    /**
     * Show the specified resource.
     * @param int $id
     * @return Renderable
     */
    public function show($id)
    {
        return view('internal::show');
    }

    /**
     * Show the form for editing the specified resource.
     * @param int $id
     * @return Renderable
     */
    public function edit($id)
    {
        return view('internal::edit');
    }

    /**
     * Update the specified resource in storage.
     * @param Request $request
     * @param int $id
     * @return Renderable
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     * @param int $id
     * @return Renderable
     */
    public function destroy($id)
    {
        //
    }

    public function updateStatus($corporate_id, $formularium_id , $status)
    {
        if ($status == 'activate') {
            $corporateFormularium = CorporateFormularium::firstOrCreate([
                'corporate_id' => $corporate_id,
                'formularium_id' => $formularium_id
            ], [
                'corporate_id' => $corporate_id,
                'formularium_id' => $formularium_id,
            ]);

            return response()->json([
                'status' => 'active',
                'message' => 'Formularium activated'
            ]);
        } else {
            $deleteCorporateFormularium = CorporateFormularium::where([
                'corporate_id' => $corporate_id,
                'formularium_id' => $formularium_id
            ])->delete();

            return ($deleteCorporateFormularium) ? response()->json([
                    'status' => 'inactive',
                    'message' => 'Formularium deactivated'
                ]) : response()->json([
                    'status' => 'error',
                    'message' => 'Error deactivating formularium'
                ]);
        }
    }
}
