<?php
namespace App\Model;

use Illuminate\Database\Eloquent\Model;
use Request;
use Excel;
use DB;

class UserSampleApplyModel extends Model
{
    protected $connection = 'order';
    protected $table      = 'lie_user_sample_apply';
    protected $primaryKey = 'apply_id';
    public $timestamps    = true;
    const CREATED_AT      = 'create_time';

    /** * @param \DateTime|int $value * @return false|int * @author dividez */ 
    public function fromDateTime($value)
    { 
        return strtotime(parent::fromDateTime($value)); 
    }

    // 获取领取列表
    public function lists($request, $export='')
    {
        $page  = $request->input('page', 1);
        $limit = $request->input('limit', 10);
        $field = ['a.apply_id', 'a.user_id', 'a.account', 'a.order_id', 'order_sn', 'a.goods_id', 'a.goods_name', 'a.apply_num', 'a.create_time'];

        $map['account']    = $request->input('account', ''); // 用户账户
        $map['goods_name'] = $request->input('goods_name', ''); // 商品名称
        $map['order_sn']   = $request->input('order_sn', ''); // 订单号
        $map['begin_time'] = $request->input('begin_time', '') ? strtotime($request->input('begin_time')) : '';
        $map['end_time']   = $request->input('end_time', '') ? strtotime($request->input('end_time')) + 86399 : '';

        $sub = UserSampleApplyModel::select(DB::raw('max(apply_id) as apply_id'))->groupBy('user_id');

        $list = $this->from('lie_user_sample_apply as a')
                ->join(DB::raw("({$sub->toSql()}) as b"), function($join) {
                    $join->on('a.apply_id', '=', 'b.apply_id');
                })->where(function($query) use ($map) {
                    // 客服名称
                    if ($map['account']) {
                        $query->where('a.account', '=', $map['account']);
                    }
                })->where(function($query) use ($map) {
                    // 邮箱
                    if ($map['goods_name']) {
                        $query->where('a.goods_name', 'like', $map['goods_name'].'%');
                    }
                })->where(function($query) use ($map) {
                    // 客服名称
                    if ($map['order_sn']) {
                        $query->where('a.order_sn', '=', $map['order_sn']);
                    }
                })->where(function($query) use ($map) {
                    // 创建时间
                    if(!empty($map['begin_time']) && !empty($map['end_time'])) {  
                        $query->whereBetween('a.create_time', [$map['begin_time'], $map['end_time']]);
                    }
                    else if(!empty($map['begin_time'])) {
                        $query->where('a.create_time', '>=', $map['begin_time']);
                    }
                    else if(!empty($map['end_time'])) {
                        $query->where('a.create_time', '<=', $map['end_time']);
                    }
                })
                ->select($field)
                ->orderBy('a.create_time', 'desc')
                ->orderBy('a.apply_id', 'asc');

        if ($export) {
            $list = $list->get()->toArray();

            $list = $this->handle($list);

            if (empty($list)) {
                echo '<script>alert("导出数据为空");history.go(-1);</script>';die;
            }

            return $list;
        } else {
            $list = $list->paginate($limit, ['*'], 'page', $page)->toArray();

            $data = $this->handle($list['data']);

            return [0, '获取成功', $data, $list['total']];
        }
    }

    // 处理数据
    public function handle($data)
    {
        if (!$data) return false;

        foreach ($data as &$v) {
            $UserSampleInviteModel = new UserSampleInviteModel;
            $UserInfoModel         = new UserInfoModel;

            $v['invite_count']    = $UserSampleInviteModel->getUserInviteCount($v['user_id']);
            $v['apply_num_total'] = $this->getSampleApplySum($v['user_id']);
            $v['apply_count']     = $UserInfoModel->getUserApplyCount($v['user_id']);
        }

        return $data;
    }

    // 获取指定用户申请的样片总数
    public function getSampleApplySum($user_id)
    {
        return $this->where('user_id', $user_id)->sum('apply_num');
    }

    // 获取领取记录
    public function applyLog($request)
    {
        $user_id = $request->input('user_id');

        $page  = $request->input('page', 1);
        $limit = $request->input('limit', 10);
        $field = ['apply_id', 'user_id', 'account', 'order_id', 'order_sn', 'goods_id', 'goods_name', 'apply_num', 'create_time'];

        $list = $this->where('user_id', $user_id)
                ->select($field)
                ->orderBy('create_time', 'desc')
                ->orderBy('apply_id', 'asc')
                ->paginate($limit, ['*'], 'page', $page)->toArray();

        return [0, '获取成功', $list['data'], $list['total']];
    }

}