<?php

namespace App\Domains\CostUnit\Controllers;

use App\Domains\CostUnit\Actions\ChangeCostUnitTreasurers\ChangeCostUnitTreasurersCommand;
use App\Domains\CostUnit\Actions\ChangeCostUnitTreasurers\ChangeCostUnitTreasurersRequest;
use App\Providers\InertiaProvider;
use App\Resources\CostUnitResource;
use App\Scopes\CommonController;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;

class TreasurersEditController extends CommonController {
    public function __invoke(int $costUnitId) : JsonResponse {
        $costUnit = $this->costUnits->getById($costUnitId);
        if (null === $costUnit) {
            return response()->json([
                'status' => 'error',
                'message' => 'Die Kostenstelle konnte nicht geladen werden.'
            ]);
        }



        return response()->json([
            'status' => 'success',
            'costUnit' => new CostUnitResource($costUnit)->toArray(request())
        ]);
    }

    public function update(Request $request, int $costUnitId) : JsonResponse {
        $costUnit = $this->costUnits->getById($costUnitId);
        if (null === $costUnit) {
            return response()->json([
                'status' => 'error',
                'message' => 'Die Kostenstelle konnte nicht geladen werden.'
            ]);
        }

        $changeTreasurersRequest = new ChangeCostUnitTreasurersRequest($costUnit, $request->get('selectedTreasurers'));
        $changeTreasurersCommand = new ChangeCostUnitTreasurersCommand($changeTreasurersRequest);
        if ($changeTreasurersCommand->execute())  {
            return response()->json([
                'status' => 'success',
                'message' => 'Die Schatzis wurden erfolgreich gespeichert.'
            ]);
        }

        return response()->json([
            'status' => 'error',
            'message' => 'Beim Bearbeiten der Kostenstelle ist ein Fehler aufgetreten.'
        ]);
    }
}
