<?php

namespace App\Http\Controllers\CFP;

use App\Models\Web\CF_WEB_SUPPORT_ANSWERS;
use App\Models\Web\CF_WEB_SUPPORT_TICKET;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class SupportController extends Controller
{
    public function all (Request $request)
    {
        $tickets = CF_WEB_SUPPORT_TICKET::latest("REG_DATE")->with(['user', 'authority'])->paginate(10);
        return view('cfp.support.index')->withTickets($tickets);
    }

    public function view (Request $request, $id)
    {
        try {
            $ticket = CF_WEB_SUPPORT_TICKET::findOrFail($id);
        } catch (ModelNotFoundException $e) {
            \Log::error("support.view err=" . $e->getMessage());
            return view('cfp.errors.404');
        }

        $ticket->load(['user', 'authority', 'category', 'answers']);
        return view('cfp.support.view')->withTicket($ticket);
    }

    public function apiAnswerSupport (Request $request, $tid)
    {
        try {
            $ticket = CF_WEB_SUPPORT_TICKET::findOrFail($tid);
        } catch (ModelNotFoundException $e) {
            \Log::error("ticket not found id=" . $tid);
            return view('cfp.errors.404');
        }

        $messages = [
            "text.required" => "Oops, esqueceu de escrever sua resposta?"
        ];
        \Validator::make($request->post(), [
            "text" => "bail|required"
        ], $messages)->validate();

        $ticket->AUTHORITY_USN = $this->user_data->USN;
        if ($request->input('canClose', false) && $ticket->authority->USN == $this->user_data->USN) {
            $ticket->TICKET_STATUS_NARF = 'F';
        } else {
            $ticket->TICKET_STATUS_NARF = 'R';
        }
        $ticket->LAST_UPDATE = date('Y-m-d H:i:s');
        $ticket->save();

        $answer = new CF_WEB_SUPPORT_ANSWERS;
        $answer->TID = $tid;
        $answer->USN = $this->user_data->USN;
        $answer->TEXT = $request->input("text");
        if ($answer->save()) {
            return redirect()->back()->withSuccess("Resposta enviada com sucesso, aguarde o retorno do usuário.");
        } else {
            return redirect()->back()->withError("Oops, ocorreu um erro ao enviar a resposta, tente novamente");
        }
    }

    public function apiCloseTicket (Request $request, $tid)
    {
        if (!$request->hasValidSignature()) {
            return view('cfp.errors.403');
        }

        $ticket = null;
        try {
            $ticket = CF_WEB_SUPPORT_TICKET::findOrFail($tid);
        } catch (ModelNotFoundException $e) {
            \Log::error("apiCloseTicket tid=" . $tid);
        }

        if ($ticket->authority->USN != $this->user_data->USN) {
            return view("cfp.errors.403");
        }

        $ticket->TICKET_STATUS_NARF = 'F';
        if ($ticket->save()) {
            return redirect()->back()->withSuccess("Ticket finalizado com sucesso!");
        } else {
            return redirect()->back()->withError("Ocorreu um erro ao fechar o ticket, tente novamente.");
        }
    }
}
