<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Traits\Api;
use App\Models\Role;
use App\Models\User;
use App\DataTables\PendingDataTable;
use App\DataTables\OpenedDataTable;
use App\DataTables\EscalatedDataTable;
use App\DataTables\ClosedDataTable;
use App\DataTables\ValidatedDataTable;
use App\DataTables\AlertsDataTable;
use App\DataTables\OccurrenceDatableDataTable;
use Auth;
use Illuminate\Support\Facades\Log;



class TicketController extends Controller
{
    use Api;

    public function opened(OpenedDataTable $datatable){
        $roles = Role::all();
        $users = User::all();
        
            return $datatable->render('tickets.opened',['users'=>$users,'roles'=>$roles,'pagename'=>'Opened Tickets',]);
        
    }
    public function closed(ClosedDataTable $datatable){
        $roles = Role::all();
        $users = User::all();
        
        return $datatable->render('tickets.closed',['users'=>$users,'roles'=>$roles,'pagename'=>'Closed Tickets',]);

    }
    public function escalated(EscalatedDataTable $datatable){
        $roles = Role::all();
        $users = User::all();
        return $datatable->render('tickets.escalated',['users'=>$users,'roles'=>$roles,'pagename'=>'Escalated Tickets',]);
        

    }
    public function pending(PendingDataTable $datatable){
        $roles = Role::all();
        $users = User::all();
        

        return $datatable->render('tickets.pending',['users'=>$users,'roles'=>$roles,'pagename'=>'Pending Tickets']);

    }
    public function validated(ValidatedDataTable $datatable){
        $roles = Role::all();
        $users = User::all();
       
        return $datatable->render('tickets.validated',['users'=>$users,'roles'=>$roles,'pagename'=>'Validated Tickets']);

    }
    public function showTicket(Request $request){
        $roles = Role::all();
        $users = User::all();
        $ticket_id = $request->query('ticket_id');
        $url = env('TICKETS_API_URL')."/view";
        $response = $this->get($url,['ticket_id'=>$ticket_id]);

        // dd($ticket_id,$url,$response);
        if($response->api_code == 200){
            $ticket=$response->api_data;
            return view('tickets.show',compact('roles','users','ticket'),['pagename'=>'Ticket View']);
        }else{
        return redirect()->back()->with('apiResponse',$response);
        }
    }
    public function updateTicket(Request $request){
        // $ticket_id = $request->query('ticket_id');
        $request->validate([
            'title'=>'required',
            'type'=>'required',
            'description'=>'required',
            'priority'=>'required',
            'assigned_to'=>'required',
        ]);
        $url = env('TICKETS_API_URL').'/update';
        $data = $request->all();
        // dd($data);
        $response = $this->post($url,$data);
        // dd($response, $data);
        return redirect()->back()->with('apiResponse',$response);
    }
    public function createTicket(Request $request){
        $request->validate([
            'title'=>'required',
            'type'=>'required',
            'description'=>'required',
            'priority'=>'required',
            'assigned_to'=>'required',
        ]);
        $url = env('TICKETS_API_URL').'/create/'.Auth()->user()->id;
        $data = $request->all();
        $response = $this->post($url,$data);
        // dd($response);
        return redirect()->back()->with('apiResponse',$response);

    }
    public function openTicket(Request $request){
        $ticket_id = $request->query('ticket_id');
        $url = env('TICKETS_API_URL').'/open';
        $data = [
            'user_id'=>Auth()->user()->id,
            'ticket_id'=>$ticket_id
        ];
        $response = $this->post($url,$data);

        if($response->api_code == 200){
            $ticket_id=$response->api_data;
            //  dd($ticket_id)
            return redirect()->route('tickets.show',['ticket_id'=>$ticket_id]);
        }else{
        return redirect()->back()->with('apiResponse',$response);
        }
        // dd($ticket_id);
    }

    public function closeTicket(Request $request){
        $url = env('TICKETS_API_URL').'/close';
        $data = $request->all();
        // dd($data);
        $response = $this->post($url,$data);
        // dd($response, $data,$url);
        return redirect()->back()->with('apiResponse',$response);
        // dd($request->all());
    }
    public function escalateTicket(Request $request){
        $url = env('TICKETS_API_URL').'/escalate';
        $data = $request->all();
        // dd($data);
        $response = $this->post($url,$data);
        // dd($response, $data,$url);
        return redirect()->back()->with('apiResponse',$response);
        dd($request->all());

    }
    public function validateTicket(Request $request){
        $url = env('TICKETS_API_URL').'/validate';
        $data = $request->all();
        // dd($data);
        $response = $this->post($url,$data);
        // dd($response, $data,$url);
        return redirect()->back()->with('apiResponse',$response);
        dd($request->all());
    }

    public function confirmEscalate(Request $request){
        $ticket_id = $request->query('ticket_id');
        return back()->with('escalateModal',['ticket_id'=>$ticket_id]);
    }
    public function confirmClose(Request $request){
        $ticket_id = $request->query('ticket_id');
        return back()->with('closeModal',['ticket_id'=>$ticket_id]);
    }
    public function confirmValidate(Request $request){
        $ticket_id = $request->query('ticket_id');
        return back()->with('validateModal',['ticket_id'=>$ticket_id]);
    }


    public function alerts(AlertsDataTable $datatable){
        $roles = Role::all();
        $users = User::all();

        return $datatable->render('tickets.alerts',['users'=>$users,'roles'=>$roles,'pagename'=>'Alerts',]);

    }

    public function occurrence(OccurrenceDatableDataTable $datatable){
        $roles = Role::all();
        $users = User::all();
        

        return $datatable->render('tickets.occurrence',['users'=>$users,'roles'=>$roles,'pagename'=>'Occurrence Tickets']);
    }
}
