<?php

namespace app\api\controller;

use app\common\controller\Api;
use think\Db;
/**
 * 消息
 */
class Message extends Api
{
    protected $noNeedLogin = [];
    protected $noNeedRight = ['*'];

    //消息页信息
    public function index(){
        $rs = [
            'msg_first'      => Db::name('message')->where('user_id',$this->auth->id)->order('id desc')->find(),
            'msg_unread_num' => Db::name('message')->where('user_id',$this->auth->id)->where('status',0)->count(),
            'msgsys_first'   => Db::name('message_sys')->order('id desc')->find(),
        ];

        //系统消息未读数量
        $sys_ids = Db::name('message_sys')->column('id');
        $all_num = count($sys_ids);
        $read_num = Db::name('user_messagesys')->where('user_id',$this->auth->id)->where('msg_id','IN',$sys_ids)->count();
        $rs['msgsys_unread_num'] = $all_num > $read_num ? $all_num - $read_num : 0; //因公告被删除,未读公告没来得及删除,相减可能会负数

        $this->success(1,$rs);
    }

    //个人消息全部改为已读
    public function message_read(){
        Db::startTrans();
        //读取即为已读
        $map = [
            'user_id'  => $this->auth->id,
            'status'   => 0,
        ];
        $rs = Db::name('message')->where($map)->update(['status'=>1]);
        if($rs === false){
            Db::rollback();
            $this->error('操作失败');
        }


        //系统消息
        //全部未读
        $rs = Db::name('user_messagesys')->where('user_id',$this->auth->id)->delete();
        if($rs === false){
            Db::rollback();
            $this->error('操作失败');
        }

        //循环全部已读
        $list = Db::name('message_sys')->column('id');
        if(!empty($list)){
            $newall = [];
            foreach($list as $key => $msg_id){
                $newall[] = [
                    'user_id' => $this->auth->id,
                    'msg_id' => $msg_id,
                ];
            }
            if(!empty($newall)){
                $rs = Db::name('user_messagesys')->insertAll($newall);
                if($rs === false){
                    Db::rollback();
                    $this->error('操作失败');
                }
            }
        }

        Db::commit();
        $this->success();
    }

    //我的个人消息列表
    public function mylist(){
        $list = Db::name('message')->where('user_id',$this->auth->id)->autopage()->order('id desc')->select();

        //读取即为已读
        $map = [
            'user_id' => $this->auth->id,
            'status' => 0,
        ];
        Db::name('message')->where($map)->update(['status'=>1]);
        $this->success('success',$list);
    }

    /*
     * 获取系统消息列表
     */
    public function getmessagesys() {

        $list = Db::name('message_sys')->autopage()->order('id desc')->select();

        Db::startTrans();
        //系统消息
        //全部未读
        $rs = Db::name('user_messagesys')->where('user_id',$this->auth->id)->delete();
        if($rs === false){
            Db::rollback();
            $this->error('操作失败');
        }

        //循环全部已读
        $list2 = Db::name('message_sys')->column('id');
        if(!empty($list2)){
            $newall = [];
            foreach($list2 as $key => $msg_id){
                $newall[] = [
                    'user_id' => $this->auth->id,
                    'msg_id' => $msg_id,
                ];
            }
            if(!empty($newall)){
                $rs = Db::name('user_messagesys')->insertAll($newall);
                if($rs === false){
                    Db::rollback();
                    $this->error('操作失败');
                }
            }
        }

        Db::commit();
        $this->success("获取成功!",$list);
    }



}