<?php

namespace App\Libs\Services;

use Illuminate\Pagination\Paginator;
use Illuminate\Support\Str;
use App\Models\Configuration;

class ConfigurationService
{

    /**
     * Get the backend configurations list for the backoffice grid
     *
     * @param $page
     * @param $rowCount
     * @param $sort
     * @param $search
     *
     * @return array
     */
    public function getConfigurationsList($page, $rowCount, $sort, $search)
    {
        Paginator::currentPageResolver(function () use ($page) {
            return $page;
        });

        if (!empty($search)) {
            $query = Configuration::where(function ($query) use ($search) {
                $query->orWhere('name', 'like', "%{$search}%");
            });
        } else {
            $query = Configuration::query();
        }
        if (empty($sort)) {
            $rows = $query->paginate($rowCount);
        } else {
            foreach ($sort as $field => $direction) {
                if (empty($direction) || !Str::is(strtolower($direction), "desc")) {
                    $orderDirection = "asc";
                } else {
                    $orderDirection = $direction;
                }
                $rows = $query->orderBy($field, strtolower($orderDirection))->paginate($rowCount);
                break;
            }
        }

        return [
            "total"             => $rows->total(),
            "current"           => $rows->currentPage(),
            "rowCount"          => $rowCount,
            "rows"              => $rows->getCollection()
        ];
    }



    public function editConfiguration($configId, $data)
    {
        $configuration = Configuration::findOrFail($configId);
        return $this->_filConfigurationData($configuration, $data);
    }


    /**
     * Load the configs from the database
     */
    public function loadConfigs()
    {
        if (config('api.load_db_configs')) {
            $settings = Configuration::pluck('value', 'key')->toArray();
            config($settings);
        }
    }

    protected function _filConfigurationData(Configuration $configuration, $data)
    {
        $configuration->value = $data['value'];
        $configuration->save();
        return $configuration;
    }
}
