<?php

namespace app\controller\api;

use app\model\AccountFootmarks;
use app\model\Event;
use Exception;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
use think\response\Json;

class Statistics extends Base
{
    protected $noNeedLogin = ['event'];
    /**
     * 事件列表
     *
     * @return Json
     * @throws DataNotFoundException
     * @throws DbException
     * @throws ModelNotFoundException
     */
    public function event(): Json
    {
        $data = Event::field('id, name')->select()->toArray();

        return $this->json(0, 'success', $data);
    }

    /**
     * 上报
     *
     * @return Json
     * @throws Exception
     */
    public function report(): Json
    {
        $data      = input();
        $accountId = $this->request->user['user_id'] ?? 0;

        if (empty($data)) {
            return $this->json();
        }

        if (!is_array($data)) {
            $data = json_decode($data, true);
        }

        $insert = [];
        if (count($data) > 1000) {
            //TODO 太大就分片处理

        } else {
            foreach ($data as $d) {
                if (!isset($d['e']) || !isset($d['t'])) {
                    return $this->json(4001, '参数错误');
                }
                $arr               = [];
                $arr['event_id']   = (int) ($d['e'] ?? 0);
                $arr['account_id'] = $accountId;
                $arr['content_id'] = (int) ($d['c'] ?? 0);
                $t = (strlen($d['t']) == 13) ?  $d['t'] / 1000 : $d['t'];
                $arr['created_at'] = date('Y-m-d H:i:s', $t);

                $insert[] = $arr;
            }
        }

        // 若量大 时间长 可丢入队列操作
        if (count($insert) > 0) {
            (new AccountFootmarks())->saveAll($insert);
        }

        return $this->json();
    }
}