<?php

namespace App\Http\Controllers;

use App\Http\Requests\PlanesRequest;
use App\Http\Resources\DefaultCollection;
use App\Http\Resources\DefaultResource;
use App\Models\Planes;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class PlanesController extends Controller
{
    public function index(): DefaultCollection
    {
        $size = request('page.size', 10);
        $page = request('page.number', 1);

        $sort = request('sort', null);

        $result = Planes::from('planes as p')
            ->join('grupos_planes as gp', 'gp.id', 'p.grupo_plan_id')
            ->select(
                'p.id',
                'p.grupo_plan_id',
                'p.titulo',
                'p.descripcion',
                'p.precio_plan',
                'p.limite_transacciones_libres',
                'p.tipo_calculo',
                'p.precio_transaccion',
                'p.orden',
                'p.estado',

                'gp.titulo as grupo_plan_titulo'
            )
            ->applySorts($sort, 'p.id')
            ->filterLike(request('filter', []))
            ->paginate($size, ['p.id'], 'page[number]', $page);

        return DefaultCollection::make($result);
    }

    public function store(PlanesRequest $request): DefaultResource
    {
        $input = $request->input('data.attributes');
        $result = Planes::create($input);

        return DefaultResource::make($result);
    }

    public function update(PlanesRequest $request, $id): DefaultResource
    {
        $input = $request->input('data.attributes');

        $result = Planes::find($id);
        $result->fill($input)->save();

        return DefaultResource::make($result);
    }

    public function destroy($id): Response
    {
        Planes::find($id)->delete();
        return response()->noContent();
    }

    public function listar()
    {
        $result = Planes::from('planes as p')
            ->join('grupos_planes as gp', 'gp.id', 'p.grupo_plan_id')
            ->select(
                'p.id',
                'p.titulo',

                'p.precio_plan',
                'gp.titulo as grupo_plan_titulo'
            )->orderBy('p.orden', 'asc')
            ->get();

        return DefaultCollection::make($result);
    }
}
