<?php
/**
 * ${CARET}
 * @file:NoticesController.php
 * @Created by gnitif
 * @Date: 2023/3/27
 * @Time: 11:18
 */


namespace Modules\System\Http\Controllers;


use Catch\Base\CatchController as Controller;
use Catch\Exceptions\FailedException;
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
use Illuminate\Http\Request;
use Modules\System\Http\Requests\NoticeRequest;
use Modules\System\Models\NoticeTypes;
use Modules\System\Services\Notice\NoticesService;

class NoticesController extends Controller
{
    public function list(Request $request)
    {
        return NoticesService::list();

    }

    /**
     *  添加通知
     * name: addNotice
     * @param NoticeRequest $request
     * @return mixed
     * date 2023/03/29 14:47
     */
    public function addNotice(NoticeRequest $request)
    {
        return NoticesService::addNotice($request->all());
    }

    /**
     *  删除通知
     * name: delete
     * @param $id
     * date 2023/03/29 14:48
     */
    public function delete($id)
    {
        return NoticesService::delete($id);
    }

    /**
     *  获取通知详情
     * name: info
     * @param $id
     * @return mixed
     * date 2023/03/29 14:59
     */
    public function info($id)
    {
        return NoticesService::getDetail($id);
    }

    public function edit($id, Request $request)
    {
        $title = $request->input('title', '');
        $content = $request->input('content', '');
        $notice_type_id = $request->input('notice_type_id', 0);

        if (empty($title)) {
            throw new FailedException('通知标题不能为空!');
        }
        if (empty($content)) {
            throw new FailedException('通知内容不能为空!');
        }
        if (empty($notice_type_id)) {
            throw new FailedException('通知类型必填!');
        }
        $tye = NoticeTypes::where('id', $notice_type_id)->where('is_deleted', 0)->value('id');
        if (empty($tye)) {
            throw new FailedException('通知类型不正确!');
        }
        $param = [
            'title' => $title,
            'content' => $content,
            'notice_type_id' => $notice_type_id,
            'sort' => $request->input('sort',0),
        ];
        NoticesService::update($id, $param);
    }

    /**
     *  我的通知
     * name: myNotices
     * @param Request $request
     * @return LengthAwarePaginator
     * date 2023/03/29 23:48
     */
    public function myNotices(Request $request)
    {
        return NoticesService::myNoticesList($request->all());
    }

    /**
     *  已读
     * name: setRead
     * @param $id
     * date 2023/03/29 23:51
     */
    public function setRead($id): mixed
    {
         NoticesService::setRead($id);
         return response()->json(['code' => 10000, "message" => "操作成功",'data' => []]);
    }

    /**
     *  用户删除
     * name: userDel
     * @param $id
     * @return mixed
     * date 2023/03/29 23:55
     */
    public function userDel($id): mixed
    {
        return NoticesService::userDel($id);
    }

    /**
     *  阅读详情
     * name: detail
     * @param $id
     * date 2023/03/30 00:06
     */
    public function detail($id)
    {
        return NoticesService::detail($id);
    }

    /**
     *  获取通知人群选项
     * name: objOption
     * @param Request $request
     * date 2023/03/30 10:20
     */
    public function objOption(Request $request)
    {
        $type = $request->input('type', '2');
        $name = $request->input('name', '');
        $type = $type == "3" ? "role" : "user";
        return NoticesService::objOption($type, $name);
    }

    /**
     *  home页弹窗公告
     * name: getPopup
     * date 2023/03/30 16:41
     */
    public function getPopup(){
        return  NoticesService:: getPopup();
    }

}