<?php

namespace App\Http\Controllers\User;

use App\Models\Web\CF_WEB_SUPPORT_CATEGORY;
use App\Models\Web\CF_WEB_SUPPORT_TICKET;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class SupportController extends Controller
{
    public function __construct () {
        parent::__construct();
        $this->middleware('cf_auth');
    }

    public function index (Request $request)
    {
        $tickets = CF_WEB_SUPPORT_TICKET::latest("REG_DATE")->where("USN", $this->user_data->USN)->with(["category", "authority:USN,NICK"])->paginate(10);
        return view('user.support.index')->withData($tickets);
    }

    public function newTicket (Request $request)
    {
        return view('user.support.create')->with([
            "categories" => CF_WEB_SUPPORT_CATEGORY::all()
        ]);
    }

    public function viewTicket (Request $request, $tid)
    {
        try {
            $ticket = CF_WEB_SUPPORT_TICKET::where("TID", $tid)->where("USN", $this->user_data->USN)->with(["authority:USN,NICK", "category", "answers" => function(HasMany $query){
                $query->orderBy("REG_DATE", "DESC")->with("user")->paginate(10);
            }])->firstOrFail();

            $canAnswer = $ticket->TICKET_STATUS_NARF == 'R';
            $isClosed = $ticket->TICKET_STATUS_NARF == 'F';

            return view('user.support.view')->with([
                "tid" => $tid,
                "ticket" => $ticket,
                "canAnswer" => $canAnswer,
                "isClosed" => $isClosed
            ]);
        } catch (ModelNotFoundException $e) {
            abort(404);
        }
    }

    /*
     * post actions
     */

    public function sendTicket (Request $request)
    {
        $messages = [
            "subject.required" => "Please, fill your subject.",
            "category.required" => "Choose a category.",
            "text.required" => "Write about your problem or question."
        ];
        \Validator::make($request->post(), [
            "subject" => "bail|required",
            "category" => "required",
            "text" => "required"
        ], $messages)->validate();

        $ticket = new CF_WEB_SUPPORT_TICKET;
        $ticket->USN = $this->user_data->USN;
        $ticket->TICKET_SUBJECT = $request->input('subject');
        $ticket->TICKET_TEXT = $request->input('text');
        $ticket->CATEGORY = $request->input('category');
        if ($ticket->save()) {
            return redirect()->route('support')->withSuccess("Your ticket has been sent, you can view in the list below.");
        } else {
            return redirect()->back()->withError(__("responses.Common.UnknownErrorOccured"));
        }

    }
}
