<?php

namespace App\Http\Controllers;

use App\Model\CategoriaForo;
use App\Model\Comentario;
use App\Model\Tema;
use App\Model\TemaFavorito;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Input;
use View;
use Response;

class ForoController extends Controller
{
    public function index()
    {
        try {
            $categorias = CategoriaForo::where('activo', true)->get();
            return view('pages.foro.index', compact('categorias'));
        } catch (\Exception $e) {
            Alert()->error(config('constants.ALERT.ERROR.MENSAJE'), config('constants.ALERT.ERROR.TITULO'))->persistent('Ok');
            return Redirect('/');
        }
    }
    public function categoria($id)
    {
        try {
            $categoria = CategoriaForo::find($id);
            if (empty($categoria)) {
                return response(view('errors.404'));
            }
            if ( !empty(Input::get('search')) &&  Input::get('search') != ''  ) {
                $temas = Tema::where('id_categoria', $id)->where('nombre', 'like', '%' . Input::get('search') . '%')->info()->orderBy('created_at', 'desc')->paginate(10, ['*'], 'pag');
            } else {
                $temas = Tema::where('id_categoria', $id)->info()->orderBy('created_at', 'desc')->paginate(10, ['*'], 'pag');
            }
            return view('pages.foro.categoria', compact('temas', 'categoria'));
        } catch (\Exception $e) {
            Alert()->error(config('constants.ALERT.ERROR.MENSAJE'), config('constants.ALERT.ERROR.TITULO'))->persistent('Ok');
            return Redirect('foro');
        }

    }

    public function tema($id)
    {
        try {
            $tema = Tema::find($id);
            $categoria = CategoriaForo::find($tema->id_categoria);
            if (empty($tema) || !$categoria->activo) {
                return \Response::view('errors.404', array(), 404);
            }
            $comentarios = Comentario::where('id_tema', $id)->with('cita', 'usuario')->paginate(8);
            $favorito = !TemaFavorito::where(['id_tema' => $id, 'id_usuario' => \Auth::user()->id])->get()->isEmpty();

            return view('pages.foro.tema', compact('tema', 'comentarios', 'favorito', 'categoria'));
        } catch (\Exception $e) {
            Alert()->error(config('constants.ALERT.ERROR.MENSAJE'), config('constants.ALERT.ERROR.TITULO'))->persistent('Ok');
            return Redirect('foro');
        }
    }

    public function registrarForm($id)
    {
        try {
            return view('pages.foro.partials.crearTema', compact('id'));
        } catch (\Exception $e) {
            Alert()->error(config('constants.ALERT.ERROR.MENSAJE'), config('constants.ALERT.ERROR.TITULO'))->persistent('Ok');
            return Redirect('/admin/foro');
        }
    }
    public function registrarSubmit(Request $request)
    {
        $this->validate($request, [
            'id_categoria' => 'required',
            'nombre' => 'required',
            'mensaje' => 'required'
        ]);

        try {
            $tema = [
                'nombre' => Input::get('nombre'),
                'id_usuario' => \Auth::user()->id,
                'id_categoria' => Input::get('id_categoria'),
            ];
            $idtema = Tema::create($tema)->id;

            $comentario = [
                'comentario' => Input::get('mensaje'),
                'primer_comentario' => 1,
                'id_usuario' => \Auth::user()->id,
                'id_tema' => $idtema,
                'id_cita' => null,
            ];
            Comentario::create($comentario);
            Alert()->success('El tema ha sido creado con éxito', config('constants.ALERT.SUCCESS.TITULO'))->persistent('Ok');
            return redirect()->action(
                'ForoController@tema', ['id' => $idtema]
            );
        } catch (\Exception $e) {
            Alert()->error(config('constants.ALERT.ERROR.MENSAJE'), config('constants.ALERT.ERROR.TITULO'))->persistent('Ok');
            return redirect()->action(
                'ForoController@categoria', ['id' => Input::get('id_categoria')]
            );
        }
    }

    public function comentarioSubmit(Request $request)
    {
        try {
            $this->validate($request, [
                'id_tema' => 'required',
                'id_cita' => 'required',
                'mensaje' => 'required'
            ]);
            $comentario = [
                'id_tema' => $request->id_tema,
                'id_cita' => ($request->id_cita > 0) ? $request->id_cita : null,
                'comentario' => Input::get('mensaje'),
                'id_usuario' => \Auth::user()->id,
            ];
            $id_post = Comentario::create($comentario)->id;
            $comentarios = Comentario::where('id_tema', $request->id_tema)->paginate(8);
            return redirect('foro/tema/' . $request->id_tema . '?page=' . $comentarios->lastPage() . '#post-' . $id_post);
        } catch (\Exception $e) {
            Alert()->error(config('constants.ALERT.ERROR.MENSAJE'), config('constants.ALERT.ERROR.TITULO'))->persistent('Ok');
            return redirect()->action('ForoController@tema', ['id' => $request->id_tema]);
        }
    }
    public function eliminarComentario($id)
    {
        try {
            $comentario = Comentario::find($id);
            if ($comentario->id_usuario == \Auth::user()->id || Auth::user()->isAdmin()) {
                $idtema = $comentario->id_tema;
                Comentario::destroy($id);
                Alert()->success(config('constants.ALERT.SUCCESS.MENSAJE'), config('constants.ALERT.SUCCESS.TITULO'))->persistent('Ok');
                return Redirect()->action(
                    'ForoController@tema', ['id' => $idtema]
                );
            } else {
                Alert()->error(config('constants.ALERT.ERROR.MENSAJE'), config('constants.ALERT.ERROR.TITULO'))->persistent('Ok');
                return Redirect('foro');
            }
        } catch (\Exception $e) {
            Alert()->error(config('constants.ALERT.ERROR.MENSAJE'), config('constants.ALERT.ERROR.TITULO'))->persistent('Ok');
            return Redirect('foro');
        }
    }

    public function favorito($id){
        try {
            $result = TemaFavorito::where(['id_tema' => $id, 'id_usuario' => \Auth::user()->id])->first();
            if (!$result) {
                $favorito = [
                    'id_usuario' => \Auth::user()->id,
                    'id_tema' => $id,
                ];
                TemaFavorito::create($favorito);
            } else {
                TemaFavorito::destroy($result->id);
            }
            return 'true';
        } catch (\Exception $e) {
            return 'false';
        }
    }

    //  TEMAS FAVORITOS
    public function temasFavoritos() {
        try {
            if ( !empty(Input::get('search')) &&  Input::get('search') != ''  ) {
                $temas = Tema::where('nombre', 'like', '%' . Input::get('search') . '%')->misFavoritos()->orderBy('created_at', 'desc')->paginate(10, ['*'], 'pag');
            } else {
                $temas = Tema::misFavoritos()->orderBy('tema.created_at', 'desc')->paginate(10, ['*'], 'pag');
            }
            return view('pages.foro.favoritos', compact('temas'));
        } catch (\Exception $e) {
            Alert()->error(config('constants.ALERT.ERROR.MENSAJE'), config('constants.ALERT.ERROR.TITULO'))->persistent('Ok');
            return Redirect('foro');
        }
    }
    public function removeFavorito($id){
        try {
            $result = TemaFavorito::where(['id_tema' => $id, 'id_usuario' => \Auth::user()->id])->first();
            if ($result) {
                TemaFavorito::destroy($result->id);
            }
            $temas = Tema::misFavoritos()->orderBy('tema.created_at', 'desc')->paginate(10, ['*'], 'pag');
            return Response::json(View::make('pages.foro.partials.favoritoslist', array('temas' => $temas))->render());
        } catch (\Exception $e) {
            return 'false';
        }
    }

    //  TEMAS CREADOS
    public function temasCreados() {
        try {
            if ( !empty(Input::get('search')) &&  Input::get('search') != ''  ) {
                $temas = Tema::where('id_usuario', \Auth::user()->id)->where('nombre', 'like', '%' . Input::get('search') . '%')->orderBy('created_at', 'desc')->paginate(10, ['*'], 'pag');
            } else {
                $temas = Tema::where('id_usuario', \Auth::user()->id)->orderBy('created_at', 'desc')->paginate(10, ['*'], 'pag');
            }
            return view('pages.foro.creados', compact('temas'));
        } catch (\Exception $e) {
            Alert()->error(config('constants.ALERT.ERROR.MENSAJE'), config('constants.ALERT.ERROR.TITULO'))->persistent('Ok');
            return Redirect('foro');
        }
    }
    public function eliminarTema($id)
    {
        try {
            $tema = Tema::find($id);
            if ($tema->id_usuario == \Auth::user()->id || \Auth::user()->isAdmin()) {
                Comentario::where('id_tema','=',$id)->delete();
                TemaFavorito::where('id_tema','=',$id)->delete();
                Tema::destroy($id);
                Alert()->success(config('constants.ALERT.SUCCESS.MENSAJE'), config('constants.ALERT.SUCCESS.TITULO'))->persistent('Ok');
            } else {
                Alert()->error(config('constants.ALERT.ERROR.MENSAJE'), config('constants.ALERT.ERROR.TITULO'))->persistent('Ok');
            }
            return redirect()->back();
        } catch (\Exception $e) {
            Alert()->error(config('constants.ALERT.ERROR.MENSAJE'), config('constants.ALERT.ERROR.TITULO'))->persistent('Ok');
            return Redirect('foro');
        }
    }

    public function eliminarTemaAdmin($id)
    {
        try {
            if (\Auth::user()->roleId == config('constants.ROLES.ADMINISTRADOR')) {
                Tema::destroy($id);
                Alert()->success(config('constants.ALERT.SUCCESS.MENSAJE'), config('constants.ALERT.SUCCESS.TITULO'))->persistent('Ok');
            } else {
                Alert()->error(config('constants.ALERT.ERROR.MENSAJE'), config('constants.ALERT.ERROR.TITULO'))->persistent('Ok');
            }
            return Redirect()->action('ForoController@temasCreados');
        } catch (\Exception $e) {
            Alert()->error(config('constants.ALERT.ERROR.MENSAJE'), config('constants.ALERT.ERROR.TITULO'))->persistent('Ok');
            return Redirect('foro');
        }
    }
}
