<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Role;
use App\Models\User;
use Auth;
use App\Traits\Api;



class UserController extends Controller
{
    use Api;

    public function dashboard(Request $request)
    {

        $validated = $request->validate([
            'duration' => ['nullable'],
            'start_date' => ['required_if:duration,custom'],
            'end_date' => ['required_if:duration,custom']
        ]);

        $params = $request->only('duration', 'start_date', 'end_date');
        // dd($params);
        $users = User::all();
        $roles = Role::all();

        $url = env('TICKETS_API_URL') . '/all';
        $response = $this->get($url, $params);

        // if($response->api_code == 200){
        $tickets = $response->api_data;
        // dd($params,$tickets);
        return view('admin.dashboard', compact('roles', 'users', 'tickets'), ['pagename' => 'Dashboard']);
        // }
    }

    public function show()
    {
        $roles = Role::all();
        $users = User::all();
        // dd($roles);
        return view('users.users', compact('roles', 'users'), ['pagename' => 'Users']);
    }

    public function detail(Request $request)
    {
        $roles = Role::all();
        $users = User::all();
        $url = env('TICKETS_API_URL') . '/for_user/' . auth()->user()->id;
        $response = $this->get($url, ['user_id' => $request->user_id]);
        if (!empty($response) && $response->api_code == 200) {
            $data = $response->api_data;
            // dd($data);
            return view('users.show', compact('data', 'users', 'roles'));
        } else {
            return redirect()->back()->with('error', $response->api_message);
        }
    }
    public function edit(Request $request)
    {
        $user = User::find($request->user_id);
        if (!empty($user)) {
            return view('users.edit', compact('user'));
        }
    }
    public function delete(Request $request)
    {
        $user = User::find($request->user_id);
        if (!empty($user)) {
            $user->delete();
            return redirect()->back()->with('success', "User deleted successfully");
        } else {
            return redirect()->back()->with('error', "User deletion failed");
        }
    }

    public function create(Request $request)
    {
        $request->validate([
            'first_name' => 'required',
            'last_name' => 'required',
            'email' => 'required|email|unique:users,email',
            'phone' => 'required|max:12|regex:/^233[0-9]{9}$/',
            'role' => 'required',
            'password' => 'required|min:6',
        ]);
        // dd($request->all());
        $role = Role::find($request->role);
        $user = new User();
        $user->first_name = $request->first_name;
        $user->middle_name = $request->middle_name;
        $user->last_name = $request->last_name;
        $user->username = strtolower(substr($request->first_name, 0, 1)) . strtolower($request->last_name);
        $user->email = $request->email;
        $user->phone = $request->phone;
        $user->password = $request->password;
        $user->is_app_support = ($request->role == 2) ? true : false;
        $user->is_ce = ($request->role == 3) ? true : false;
        $role->users()->save($user);

        return redirect()->route('admin.user.show')->with('success', 'New user created successfully');
    }
}
