<?php

namespace PluginsNameSpaces\Http\Controllers;

use PluginsNameSpaces\Framework\Http\Controller;
use PluginsNameSpaces\Framework\Http\Request;
use PluginsNameSpaces\Http\Requests\ExampleRequest;
use PluginsNameSpaces\Models\Example;

/**
 * Example REST controller backing the admin dashboard.
 */
class DashboardController extends Controller
{
    /**
     * Dashboard stats.
     *
     * GET /__PLUGIN_NAME__/v1/stats
     *
     * @param Request $request
     * @return \WP_REST_Response
     */
    public function stats(Request $request)
    {
        return $this->success([
            'plugin'   => __SNAKE_NAME___config('app.name'),
            'version'  => __SNAKE_NAME___config('app.version'),
            'examples' => Example::query()->count(),
        ]);
    }

    /**
     * Paginated list of examples with their items eager-loaded.
     *
     * GET /__PLUGIN_NAME__/v1/examples?page=1
     *
     * @param Request $request
     * @return \WP_REST_Response
     */
    public function index(Request $request)
    {
        $page = (int) ($request->get('page', 1));

        $examples = Example::query()
            ->with('items')
            ->orderBy('id', 'DESC')
            ->paginate(15, $page);

        return $this->success($examples->toArray());
    }

    /**
     * Persist a new example (validated by ExampleRequest).
     *
     * POST /__PLUGIN_NAME__/v1/examples  { "title": "..." }
     *
     * @param Request $request
     * @return \WP_REST_Response
     */
    public function store(Request $request)
    {
        $data = (new ExampleRequest($request))->validate();

        $example = Example::create([
            'title'  => sanitize_text_field($data['title']),
            'status' => $data['status'] ?? 'active',
        ]);

        return $this->success($example->toArray(), 201);
    }
}
