<?php

namespace Modules\Admin\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Modules\Main\Models\Company\Company;
use Modules\Main\Models\Company\CompanyStatus;

use Modules\Main\Models\Agent\Agent;
use Modules\Main\Models\Company\CompanyAdmin;

class AdminCompaniesController extends Controller
{
    public function index(Request $request)
    {
        $companies = Company::orderBy('name');
        //if ($request->filter) {
        if ($request->filter)
        {
            if ($request->filter == 'trashed') {
                $companies->onlyTrashed();
            } else {
                if ($request->filter != 'all') {
                    $companies->where('status', $request->filter);
                }
            }
        }
        $companies = $companies->get();
        return view('admin::companies.index', [
            'companies' => $companies,
            'statuses'  => CompanyStatus::cases(),
            'filter'    => $request->filter
        ]);
    }
    public function edit(Company $company)
    {
        return view('admin::companies.edit', [
            'company'               => $company,
            'companyAgentsRelation' => Agent::where('company_id', $company->id)->get(),
            'companyAdminsRelation' => CompanyAdmin::where('company_id', $company->id)->get(),
        ]);
    }

    public function update(Request $request, Company $company)
    {
        $validated = $request->validate([
            'name' => 'required',
            'email' => "required|unique:companies,email,{$company->id}",
            'phone' => "required|unique:companies,phone,{$company->id}",
        ],
            [
                'email.unique' => 'Указанная электронная почта уже существует',
                'phone.unique' => 'Указанный номер телефона уже существует'
            ]
        );
        $company->update($request->only('name', 'email', 'phone'));
        if ($request->token) {
            $company->bitrixy->token = $request->token;
            $company->bitrixy->save();
        }
        return to_route('admin.companies.edit', ['company' => $company]);
    }
    public function delete(Company $company) {
        if ($company->trashed()) {
            if ($company->forceDelete())
                return back()->withSuccess('Агентство было полностью удалено из базы данных');
        } else {
            if ($company->delete())
                return back()->withSuccess('Агентство было перемещено в корзину. Все пользователи, прикрепленные к агентству не смогут войти на портал.');
        }
        return back()->withErrors('Не удалось удалить агентство');
    }

    public function restore(Company $company) {
        $company->restore();
        return to_route('admin.companies.edit', ['company' => $company])->withSuccess('Агентство "' . $company->name . '" было восстановлено из корзины');
    }

    public function deleteAdmin(CompanyAdmin $companyAdmin) {
        $companyAdmin->delete();
        return back();
    }
    public function deleteAgent(Agent $agent) {
        $agent->delete();
        return back();
    }
}
