<?php

namespace App\Http\Controllers\Web\Organization;

use Aix\Sms\Contracts\Smser;
use App\Http\Controllers\Web\WebBaseController;
use App\Models\Category;
use App\Repositories\MemberLogRepository;
use App\Services\Common\EmailService;
use App\Services\Common\SmsService;
use App\Services\Company\DispensingService;
use App\Services\Organization\OrganizationService;
use App\Services\Organization\ServiceService;
use App\Validators\OrganizationValidatorRequest;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use App\Services\Auth\RegisterService;
use App\Services\Common\MembersSetmealService;

class OrganizationController  extends WebBaseController
{
    protected $organizationService;
    protected $serviceService;
    protected $smsService;
    protected $memberLogRepository;
    protected $emailService;
    protected $dispensingService;
    private $registerService;
    private $membersSetmealService;

    public function __construct(OrganizationService $organizationService,ServiceService $serviceService,SmsService $smsService,MemberLogRepository $memberLogRepository,EmailService $emailService,DispensingService $dispensingService, RegisterService $registerService, MembersSetmealService $membersSetmealService)
    {
        $this->organizationService = $organizationService;
        $this->serviceService = $serviceService;
        $this->smsService = $smsService;
        $this->memberLogRepository = $memberLogRepository;
        $this->emailService = $emailService;
        $this->dispensingService = $dispensingService;
        $this->registerService = $registerService;
        $this->membersSetmealService = $membersSetmealService;
    }

    public function index()
    {
        $user = auth('web-organization')->user();
        $service_list = $this->serviceService->list($user);
        $service_total = $this->serviceService->total($user->id);
        $trade = Category::categoryType('AIX_trade');
        return view('app.organization.index',['service_list'=>$service_list,'service_total'=>$service_total,'trade'=>$trade]);
    }

    /**
     * 机构信息
     */
    public function organizationInfo()
    {
        $user = auth('web-organization')->user();
        $organizationInfo = $this->organizationService->organizationInfo($user);
        return view('app.organization.company_info', $organizationInfo);
    }

    public function serviceAdd(Request $request)
    {
        if(request()->method()=='POST'){
            $data = $request->except('_method', '_token');
            return $this->serviceService->save($data,auth('web-organization')->user());

        }else{
            return view('app.organization.service_add');
        }
    }

    public function serviceEdit(Request $request){
        if(request()->method()=='POST'){
            $data = $request->except('_method', '_token');
            return $this->serviceService->save($data,auth('web-organization')->user());

        }else{
            $id = $request->input('id');
            $user = auth('web-organization')->user();
            $where['id'] = $id;
            $where['uid'] = $user->id;
            $serviceInfo = $this->serviceService->serviceInfo($where);
            if(!$serviceInfo){
                return $this->showMessage('没有这个需求!', route('org.index'), true);
            }
            $trade = Category::categoryType('AIX_trade');

            return view('app.organization.service_edit',['serviceInfo'=>$serviceInfo,'trade'=>$trade]);
        }
    }

    public function serviceDel(Request $request)
    {
        $id = $request->id;
        $user = auth('web-organization')->user();
        return $this->serviceService->serviceDel($id, $user);
    }

    public function orgSecurity()
    {
        $user = auth('web-organization')->user();
        $orgInfo = $this->organizationService->orgSecurity($user);
        return view('app.organization.org_security', $orgInfo);
    }

    public function loginLog()
    {
        $user = auth('web-organization')->user();
        $loginLog = $this->organizationService->orgLoginLog($user);
        $orgInfo = $user;
        $orgInfo['loginLog'] = $loginLog;
        return view('app.organization.login_log', ['organizationInfo'=>$orgInfo]);
    }

    public function modifyPwd()
    {
        return view('app.organization.ajax.ajax_modify_pwd');
    }

    public function savePwd(OrganizationValidatorRequest $request)
    {
        $user = auth('web-organization')->user();
        if (!$this->organizationService->savePwd($user, $request->oldpassword, $request->password, $request->password1)) {
            return $this->sendErrorResponse('密码修改失败!');
        }
        if ($user->mobile) {
            $this->smsService->sendSms($user->mobile, Smser::TEMPLATE_SMS_EDITPWD, ['sitename'=>subsite_config('aix.system.site.site.site_name'),'newpassword'=>$request->password]);
        }
        return $this->sendSuccessResponse('密码修改成功!');
    }

    public function authEmail()
    {
        $user = auth('web-organization')->user();
        if (!$email = $this->organizationService->authEmail($user)) {
            return response()->json(['status'=>0,'msg'=>'参数错误!']);
        }
        return response()->json(['status'=>1,'msg'=>'查询成功!','data'=>view('app.organization.ajax.ajax_auth_email', $email)->render()]);
    }

    public function emailSend(OrganizationValidatorRequest $request)
    {
        $email = $request->email;
        $id = $request->id;
        if (!$this->organizationService->checkEmailAudit($id, $email)->isEmpty()) {
            return response()->json(['status'=>0, 'msg'=>'email已验证!']);
        }
        $user = auth('web-organization')->user();
        $this->memberLogRepository->createLog($user,8001,"");

        $this->emailService->setAuthTag('organization')
            ->setCallback('App\Services\Organization\OrganizationService', 'sendAuthEmailHook', [$email, auth('web-organization')->user()])
            ->sendAuthMail($email, EmailService::TEMPLATE_VALIDATION);
        return response()->json(['status'=>1]);
    }


    public function dispensingList()
    {
        $dispensingList = $this->dispensingService->list();
        return view('app.organization.org_dispensingList',['dispensing'=>$dispensingList]);
    }

    public function transfer()
    {
        $list = DB::table('organization')->whereRaw('id>9')->get()->toArray();
        $list = json_decode(json_encode($list), true);
        foreach ($list as $k => $v){
            $info = DB::table('companys')->where('companyname',$v['orgname'])->first();
            if(!$info){
                $company=$this->registerService->registerCompany1($v);
                $this->membersSetmealService->addMemberSetmeal($company, config('aix.companyset.setmeal_com.setmeal_com_set.reg_service'));
            }

        }
    }
}