<?php

namespace app\admin\service\sys_manage;

use app\model\SysConfig;

class ConfigService
{
    public static function configList($page, $limit, $keywords)
    {
        $list = SysConfig::select('*')
            ->when($keywords != '', function ($query) use ($keywords) {
                $query->where('config_name', 'like', '%' . $keywords . '%');
            })
            ->orderBy('config_addtimes', 'DESC')
            ->forPage($page, $limit)
            ->get()
            ->toArray();
        $count = SysConfig::when($keywords != '', function ($query) use ($keywords) {
            $query->where('config_name', 'like', '%' . $keywords . '%');
        })->count();

        return json_success('', compact('list', 'page', 'limit', 'count'));
    }

    public static function configInfo($id)
    {
        $config = SysConfig::where('config_id', $id)->first();
        if (!$config) {
            return json_fail('配置不存在');
        }

        return json_success('', $config->toArray());
    }

    /**
     * @Desc 添加配置
     * @Author Gorden
     * @Date 2024/2/22 15:57
     *
     * @param $params
     * @return \support\Response
     */
    public static function addConfig($params)
    {
        try {
            $data = [
                'config_status' => $params['config_status'],
                'config_category' => $params['config_category'],
                'config_key' => $params['config_key'],
                'config_name' => $params['config_name'],
                'config_alias' => $params['config_alias'],
                'config_value' => $params['config_value'],
                'config_value_json' => !empty($params['config_value_json']) ? $params['config_value_json'] : '{}',
                'config_sort' => $params['config_sort'],
                'config_groupby' => $params['config_groupby'],
                'config_remark' => format_string($params['config_remark']),
                'config_extend_json' => !empty($params['config_extend_json']) ? $params['config_extend_json'] : '{}',
                'config_addtimes' => time()
            ];

            SysConfig::insert($data);
        } catch (\Exception $e) {
            return json_fail('添加配置失败');
        }

        return json_success('添加配置成功');
    }

    /**
     * @Desc 修改配置
     * @Author Gorden
     * @Date 2024/2/22 16:24
     *
     * @param $id
     * @param $params
     * @return \support\Response
     */
    public static function updateConfig($id, $params)
    {
        try {
            $data = [
                'config_category' => $params['config_category'],
                'config_key' => $params['config_key'],
                'config_name' => $params['config_name'],
                'config_alias' => $params['config_alias'],
                'config_value' => $params['config_value'],
                'config_value_json' => !empty($params['config_value_json']) ? $params['config_value_json'] : '{}',
                'config_sort' => $params['config_sort'],
                'config_groupby' => $params['config_groupby'],
                'config_remark' => format_string($params['config_remark']),
                'config_extend_json' => !empty($params['config_extend_json']) ? $params['config_extend_json'] : '{}',
            ];
            SysConfig::where('config_id', $id)->update($data);
        } catch (\Exception $e) {
            return json_fail('修改配置失败');
        }

        return json_success('修改配置成功');
    }

    /**
     * @Desc 配置修改
     * @Author Gorden
     * @Date 2024/2/22 16:38
     *
     * @param $id
     * @param $params
     * @return \support\Response
     */
    public static function updateStatus($id, $params)
    {
        try {
            SysConfig::where('config_id', $id)->update(['config_status' => $params['config_status']]);
        } catch (\Exception $e) {
            return json_fail('配置状态修改失败');
        }

        return json_success('配置状态修改成功');
    }

    /**
     * @Desc 删除字段
     * @Author Gorden
     * @Date 2024/2/22 15:08
     *
     * @param $id
     * @return \support\Response
     */
    public static function delConfig($id)
    {
        try {
            SysConfig::where('config_id', $id)->delete();
        } catch (\Exception $e) {
            return json_fail('配置删除失败');
        }

        return json_success('配置删除成功');
    }
}