<?php

namespace App\Admin\Controllers\Content;

use App\Admin\Exports\Content\HouseApplyRsExport;
use App\Http\Controllers\Controller;
use App\Models\SmsTemplate;
use App\Models\TalentHouse;
use App\Models\TalentHouseApply;
use App\Services\Common\SmsService;
use Encore\Admin\Controllers\HasResourceActions;
use Encore\Admin\Facades\Admin;
use Encore\Admin\Grid;
use Encore\Admin\Layout\Content;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class BuyHouseRsController extends Controller
{
    use HasResourceActions;

    private $status = ['未知', '待审核', '审核通过', '审核驳回', '审核不通过'];
    private $marry = ['未知', '未婚', '已婚', '离异', '丧偶'];

    /**
     * Index interface.
     *
     * @param Content $content
     * @return Content
     */
    public function index(Content $content)
    {
        return $content
            ->header('申报列表')
            ->description(' ')
            ->body(view('admin.content.buy_house_rs')->with(['grid' => $this->grid()]));
    }

    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        $grid = new Grid(new TalentHouseApply());

        $grid->model()->with(['house', 'idcard'])->where('type', 1)->where('is_back', 2)->where('is_draft', 2)->orderBy('rs_check_status', 'ASC');

        $status_text = $this->status;
        $grid->id('ID');
        $grid->name('姓名');
        $grid->mobile('联系电话');
        $grid->talent_level('人才层次');
        $grid->column('房源')->display(function () {
            return $this->house->name;
        });
        $grid->rs_check_status('状态')->display(function () use ($status_text) {
            return $status_text[$this->rs_check_status];
        });
        $grid->rs_check_comment('备注')->style('max-width:400px');

        $grid->actions(function ($actions) {
            $actions->append("&nbsp;<button class='btn btn-primary btn-xs detail' id=" . $actions->row['id'] . ">详情审核</button>");
        });

        $grid->filter(function ($filter) {
            $filter->disableIdFilter();
            $filter->like('name', '姓名');
            $filter->equal('house_id', '房源')->select(TalentHouse::all()->pluck('name', 'id'));
            $status_option = ['全部', '待审核', '审核通过', '审核驳回', '审核不通过'];
            $filter->where(function ($query) {
                if ($this->input > 0) {
                    $query->where('rs_check_status', '=', $this->input);
                }
            }, '状态', 'status')->radio($status_option);
        });

        $grid->disableExport(false); //显示导出按钮
        $grid->exporter(new HouseApplyRsExport()); //传入自己在第1步创建的导出类

        return $grid;
    }

    /**
     * 审核
     */
    public function audit(Request $request, SmsService $smsService)
    {
        $id     = $request->id;
        $status = $request->status;
        $reason = $request->reason;
        $url    = empty($request->url) ? admin_base_path('content/buy_house_rs') : $request->url;
        if (empty($id)) {
            admin_toastr('数据异常', 'error');
            return redirect(admin_base_path('content/buy_house_rs'));
        }
        $apply                   = TalentHouseApply::find($id);
        $apply->rs_check_status  = $status;
        $apply->rs_check_comment = $reason;
        $apply->rs_check_time    = date('Y-m-d H:i:s');
        $apply->status           = $status == 2 ? 1 : $status;
        if ($status == 4) {
            $apply->is_sock = 2;
        }
        $result = $apply->save();

        //日志
        $house = TalentHouse::find($apply['house_id']);
        $admin = Admin::user();
        $log   = [
            'house_name'    => $house['name'],
            'user_name'     => $apply['name'],
            'check_name'    => $admin['name'],
            'data'          => json_encode($apply),
            'created_at'    => date('Y-m-d H:i:s'),
            'check_status'  => $apply['rs_check_status'],
            'check_comment' => $apply['rs_check_comment'],
        ];
        DB::table('talent_house_check_log')->insert($log);

        //审核发送短信
        if ($status == 3) {
            $time = strtotime($house['supply_time']);
            $smsService->sendSms($apply['mobile'], 'sms_buyhouse_supply', ['name' => $apply['name'], 'month' => date('m', $time), 'day' => date('d', $time)]);
        }
        if ($status == 2) {
            SmsTemplate::buyHouseCheck('zj');
            SmsTemplate::buyHouseCheck('zr');
        }

        if ($result) {
            admin_toastr('审核成功', 'success');
        } else {
            admin_toastr('该信息不存在或已审核', 'error');
        }

        return redirect($url);
    }

    /**
     * 详情
     */
    public function detail(Request $request)
    {
        $id               = $request->id;
        $info             = TalentHouseApply::with('idcard')->where('id', $id)->first();
        $info->family     = json_decode($info->family);
        $info->marry_text = $this->marry[$info->marry];

        //json
        $json = ['certificates', 'marry_prove', 'household_register', 'work_prove'];
        foreach ($json as $v) {
            if (!empty(json_decode($info->$v))) {
                $info->$v = json_decode($info->$v);
            } else {
                $info->$v = [];
            }
        }

        $with                 = ['info' => $info, 'form_url' => route('content.buy_house_rs.audit'), 'status' => $this->status];
        $with['check_status'] = $info['rs_check_status'];

        $html = view('admin.ajax.buy_house_detail')->with($with)->render();
        return response()->json(['code' => 1, 'data' => $html]);
    }
}