<?php
/**
 *  通话纪录
 * @author  system
 * @version    1.0
 * @date 2018-11-27 03:15:47
 *
 */

namespace App\Http\Controllers\Admin\Call;

use App\Http\Controllers\Admin\Controller;
use App\Models\CallListModel;
use App\Models\CallRecordsModel;
use Illuminate\Http\Request;
use App\Repositories\Base\Criteria\OrderBy;
use App\Repositories\Call\Records\Criteria\MultiWhere;
use App\Repositories\Call\RecordsRepository;

class RecordsController extends Controller
{
    private $repository;

    public function __construct(RecordsRepository $repository)
    {
        if (!$this->repository) $this->repository = $repository;
    }

    /**
     * 列表页
     */
    function index(Request $request)
    {
        $search = $request->all();

        $order = array();
        if (isset($request['sort_field']) && $request['sort_field'] && isset($request['sort_field_by'])) {
            $order[$request['sort_field']] = $request['sort_field_by'];
        } else {
            $order['id'] = 'DESC';
        }


        $list = $this->repository->searchRecords($search, $order);
        $allIds = $list->pluck('id');

        $list = $list->paginate(20);


        if ($request->ajax()) {
            $view = view('admin.call.records.data', compact('list','allIds'))->render();

            return response()->json(['html' => $view]);

        }
        return view('admin.call.records.index', compact('list','allIds'));
    }


    /**
     * 添加
     */
    public function create(Request $request)
    {
        if ($request->method() == 'POST') {
            return $this->_createSave();
        }
        return view('admin.call.records.edit');
    }

    /**
     * 保存修改
     */
    private function _createSave()
    {
        $data = (array)request('data');
        $id = $this->repository->create($data);
        if ($id) {
            $url[] = array('url' => U('Call/Records/index'), 'title' => '返回列表');
            $url[] = array('url' => U('Call/Records/create'), 'title' => '继续添加');
            $this->showMessage('添加成功', $url);
        } else {
            $url[] = array('url' => U('Call/Records/index'), 'title' => '返回列表');
            return $this->showWarning('添加失败', $url);
        }
    }

    /**
     * 修改
     */
    public function update(Request $request)
    {
        if ($request->method() == 'POST') {
            return $this->_updateSave();
        }
        $data = $this->repository->find($request->get('id'));
        return view('admin.call.records.edit', compact('data'));
    }

    /**
     * 保存修改
     */
    private function _updateSave()
    {
        $data = (array)request('data');
        $ok = $this->repository->update(request('id'), $data);
        if ($ok) {
            $url[] = array('url' => U('Call/Records/index'), 'title' => '返回列表');
            return $this->showMessage('操作成功', urldecode(request('_referer')));
        } else {
            $url[] = array('url' => U('Call/Records/index'), 'title' => '返回列表');
            return $this->showWarning('操作失败', $url);
        }
    }

    public function view(Request $request)
    {
        $data = $this->repository->find(request('id'));
        $list = $data->process();

        return view('admin.call.records.view', compact('data', 'list'));
    }


    /**
     * 删除
     */
    public function destroy(Request $request)
    {
        $bool = $this->repository->destroy($request->get('id'));
        if ($bool) {
            return $this->showMessage('操作成功');
        } else {
            return $this->showWarning("操作失败");
        }
    }

    public function addCallList(Request $request)
    {
        $ids = $request->get('contact_phones');

        $ip = $request->get('ip');

        $phones = CallRecordsModel::whereIn('id', $ids)->get();

        foreach ($phones as $phone) {
            $hasAdd = CallListModel::where('phone', $phone->phone)->where('sync', 0)->count();
            if (!$hasAdd) {
                CallListModel::create(['phone' => $phone->phone, 'sync' => 0, 'ip' => $ip]);
            }


        }
        return 200;
    }
}