<?php

namespace app\api\controller;

use app\common\logic\contract\ContractLogic;
use app\common\model\auth\Admin;
use app\common\model\Company;
use app\common\model\contract\Contract;
use app\common\model\user\User;
use app\common\model\user\UserAccountLog;
use think\facade\Db;
use app\common\model\informationg\UserInformationg;
use app\common\model\informationg\UserInformationgDemand;

/**
 * Class CompanyController
 * @package app\api\controller
 */
class CompanyController extends BaseApiController
{

    //**签约公司*/
    public function index()
    {
        [$page, $limit] = $this->getPage();
        $myCompany = Company::findOrEmpty($this->userInfo['company_id'])->toArray();
        $companyIds = Contract::where('party_a', $myCompany['id'])->column('party_b');
        $query = Company::whereIn('id', $companyIds)->where('status', 1)->append(['province_name', 'city_name', 'area_name', 'street_name', 'village_name','brigade_name','area_manager_name']);
        $count = $query->count();
        $companies = $query->page($page)->limit($limit)->select()->each(function ($company) {
            $company['other_contacts'] = json_decode($company['other_contacts'], true);
            $company['qualification'] = $company['qualification'] != null ? json_decode($company['qualification'], true) : '';
            $company['company_type_name'] = Db::name('dict_data')->where('id', $company['company_type'])->value('name');
        })->toArray();
        return $this->success('', ['count' => $count, 'data' => $companies]);
    }

    /**
     * 未签约
     */
    public function unsigned()
    {
        $myCompany = Company::findOrEmpty($this->userInfo['company_id'])->toArray();
        $query = Company::where(['street' => $myCompany['street'], 'company_type' => [17, 18], 'is_contract' => 0])->where('id','<>',$this->userInfo['company_id']);
        $count = $query->count();
        $companies = $query->field('*,street street_name,area area_name,city city_name,province province_name,village village_name,brigade brigade_name')->select()->toArray();
        return $this->success('', ['count' => $count, 'data' => $companies]);
    }

    public function view()
    {
        $id = $this->request->param('id', 0);
        if (empty($id)) {
            $query = Company::find($this->userInfo['company_id']);
        } else {
            $query = Company::find($id);
        }
        if (!$query) {
            return $this->fail('公司不存在');
        }
        $company = $query->append(['province_name', 'city_name', 'area_name', 'street_name', 'area_manager_name','village_name','brigade_name'])->toArray();
        $company['other_contacts'] = json_decode($company['other_contacts'], true);
        $company['qualification'] = $company['qualification'] != null ? json_decode($company['qualification'], true) : '';
        if($company['qualification'] && isset($company['qualification']['other_qualifications'])){
            $company['qualification']['other_qualifications']=json_decode($company['qualification']['other_qualifications'],true);
        }
        $contract = Contract::where('party_b',$id)->find();
        if (!empty($contract)) {
            if ($contract['type'] == 2) {
                $contract['party_b_name'] = User::where('id', $contract['party_b'])->value('nickname');
            } else {
                $contract['party_b_name'] = Db::name('company')->where('id', $contract['party_b'])->value('company_name');
            }
            $contract['party_a_name'] = Db::name('company')->where('id', $contract['party_a'])->value('company_name');

            $contract['contract_type_name'] = Db::name('dict_data')->where('id', $contract['contract_type'])->value('name');
        }
        $company['company_type_name'] = Db::name('dict_data')->where('id', $company['company_type'])->value('name');
        $company['day_money_count'] = UserAccountLog::where(['company_id' => $company['id'], 'action' => 1])->whereDay('create_time')->sum('change_amount');
        // $users = Admin::where('id', $company['admin_id'])->field('id,name,account,phone,qualification')->select()->toArray();
        // foreach ($users as &$user) {
        //     $user['is_main'] = $user['id'] == $company['admin_id'] ? 1 : 0;
        //     $user['qualification'] = $user['qualification'] != null ? json_decode($user['qualification'], true) : [];
        //     unset($user['role_id'], $user['dept_id'], $user['jobs_id'], $user['id']);
        // }
        return $this->success('success', ['contract' => $contract ?? [], 'company' => $company]);
    }

    public function areaManager()
    {
        [$page, $limit] = $this->getPage();
        $company = Company::find($this->userInfo['company_id']);
        $query = Admin::where('id', $company['area_manager']);
        $count = $query->count();
        $data = $query->page($page)->limit($limit)->append(['province_name', 'city_name', 'area_name', 'street_name'])->field('id,name,account,avatar,province,city,area,street')->select()->toArray();
        return $this->success('success', ['count' => $count, 'data' => $data]);
    }

    /**
     * 公司人员
     */
    public function users()
    {
        [$page, $limit] = $this->getPage();
        $params = $this->request->param();
        // if($companyId==0){
        //     $companyId=$this->userInfo['company_id'];
        // }
        $wehre[] = ['company_id', '=', $this->userInfo['company_id']];
        if (isset($params['is_captain']) && $params['is_captain'] == 1) {
            $wehre[] = ['is_captain', '=', 1];
        }
        $query = User::where($wehre);
        $count = $query->count();
        $users = $query->order('id', 'desc')->page($page)->limit($limit)->with(['company' => function ($query) {
            $query->field('id,company_name');
        }])->append(['province_name', 'city_name', 'area_name', 'street_name','village_name','brigade_name'])
            ->field('id,avatar,real_name,account,mobile as phone,province,city,area,street,village,brigade,company_id,create_time,qualification,nickname,is_contract,is_captain')
            ->select()->each(function ($item, $key) {
                if ($item['qualification'] != '') {
                    $item['qualification'] = json_decode($item['qualification'], true);
                }
                if ($item['is_captain'] == 1) {
                    $item['informationg_count'] = UserInformationg::where(['create_user_id' => $item['id'], 'status' => 1])->count();
                    $item['informationg_update_time']=UserInformationgDemand::order('update_time','desc')->value('update_time');
                }
            });
        return $this->success('success', ['count' => $count, 'data' => $users]);
    }

    public function user($id)
    {
        $query = User::where('id', $id);
        $user = $query->with(['company' => function ($query) {
            $query->field('id,company_name');
        }])->field('id,sex,avatar,nickname name,account,mobile phone,id_card,qualification,province,province province_name,city,city city_name,area,area area_name,street,street street_name,village,village village_name,brigade,brigade brigade_name, is_contract,company_id,is_captain')->find()->toArray();
        
        $contract = Contract::where("type",2)->where('party_b',$id)->append(['contract_type_name'])->find();
        $user['contract'] = $contract;
        // $roleIds = AdminRole::where('admin_id', $user['id'])->column('role_id');
        // $user['roles'] = SystemRole::whereIn('id', $roleIds)->column('name');
        $user['qualification'] = $user['qualification'] != null ? json_decode($user['qualification'], true) : [];
        unset($user['role_id'], $user['dept_id'], $user['jobs_id']);
        return $this->success('success', $user);
    }

    //**发起合同 */
    public function initiate_contract()
    {
        $params = $this->request->param();
        $params['party_a'] = $this->userInfo['company_id'];
        $params['type'] = 1;
        $result = ContractLogic::initiate_contract($params);
        if ($result == true) {
            return $this->success('发起成功,等待平台风控部上传合同');
        }
        return $this->fail(ContractLogic::getError());
    }
    // /**发送合同 */
    public function Draftingcontracts()
    {
        $params = $this->request->param();
        $result = ContractLogic::Draftingcontracts($params,1);
        if ($result == true) {
            return $this->success('生成合同成功');
        }
        return $this->fail(ContractLogic::getError());
    }

    //**发送短信 */
    public function postsms()
    {
        $params = $this->request->param();
        $id=Contract::where('party_b', $params['id'])->value('id');
        $res = ContractLogic::postsms(['id'=>$id]);
        if ($res == true) {
            return $this->success('发送成功', [], 1, 1);
        } else {
            return $this->fail(ContractLogic::getError());
        }
    }
}