<?php

namespace App\Controllers\Admin;

use App\Controllers\BaseController;
use App\Models\LocalModel;
use App\Entities\Local;

class Locales extends BaseController
{
    public function index()
    {
        $model = new LocalModel();
        $q = $this->request->getGet('q');

        $builder = $model;
        if (!empty($q)) {
            $builder = $model->groupStart()
                             ->like('nombre', $q)
                             ->orLike('direccion', $q)
                             ->orLike('distrito', $q)
                             ->orLike('ciudad', $q)
                             ->groupEnd();
        }

        $locales = $builder->paginate(10, 'default');

        return view('admin/locales/index', [
            'locales' => $locales,
            'pager'   => $model->pager,
            'q'       => $q
        ]);
    }

    public function crear()
    {
        return view('admin/locales/crear');
    }

    public function guardar()
    {
        $model = new LocalModel();

        if (!$this->validate($model->validationRules)) {
            return redirect()->back()->withInput()->with('errors', $this->validator->getErrors());
        }

        $local = new Local();
        $local->nombre = $this->request->getPost('nombre');
        $local->direccion = $this->request->getPost('direccion');
        $local->distrito = $this->request->getPost('distrito');
        $local->ciudad = $this->request->getPost('ciudad');
        $local->telefono = $this->request->getPost('telefono');
        $local->estado = $this->request->getPost('estado') !== null ? 1 : 0;

        if ($model->save($local)) {
            return redirect()->to(base_url('admin/locales'))->with('success', 'Local guardado correctamente.');
        }

        return redirect()->back()->withInput()->with('error', 'No se pudo guardar el local.');
    }

    public function editar($id)
    {
        $model = new LocalModel();
        $local = $model->find($id);

        if (!$local) {
            return redirect()->to(base_url('admin/locales'))->with('error', 'Local no encontrado.');
        }

        return view('admin/locales/editar', [
            'local' => $local
        ]);
    }

    public function actualizar($id)
    {
        $model = new LocalModel();
        $local = $model->find($id);

        if (!$local) {
            return redirect()->to(base_url('admin/locales'))->with('error', 'Local no encontrado.');
        }

        if (!$this->validate($model->validationRules)) {
            return redirect()->back()->withInput()->with('errors', $this->validator->getErrors());
        }

        $local->nombre = $this->request->getPost('nombre');
        $local->direccion = $this->request->getPost('direccion');
        $local->distrito = $this->request->getPost('distrito');
        $local->ciudad = $this->request->getPost('ciudad');
        $local->telefono = $this->request->getPost('telefono');
        $local->estado = $this->request->getPost('estado') !== null ? 1 : 0;

        if ($model->save($local)) {
            return redirect()->to(base_url('admin/locales'))->with('success', 'Local actualizado correctamente.');
        }

        return redirect()->back()->withInput()->with('error', 'No se pudo actualizar el local.');
    }

    public function eliminar($id)
    {
        $model = new LocalModel();

        try {
            if ($model->delete($id)) {
                return redirect()->to(base_url('admin/locales'))->with('success', 'Local eliminado correctamente.');
            }
        } catch (\Exception $e) {
            return redirect()->to(base_url('admin/locales'))->with('error', 'No se puede eliminar el local porque está asociado a una o más salas.');
        }

        return redirect()->to(base_url('admin/locales'))->with('error', 'No se pudo eliminar el local.');
    }
}
