<?php

namespace App\Http\Controllers\Website;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use App\Models\Lead;
use App\Models\User;
use App\Models\Admin;
use App\Models\Setting;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Notification;

use App\Notifications\CompanyCreatedNotification;
use App\Notifications\CandidateCreateNotification;
use App\Notifications\Admin\NewUserRegisteredNotification;
use App\Notifications\CompanyCreateApprovalPendingNotification;
use App\Notifications\CandidateCreateApprovalPendingNotification;

class leadController extends Controller
{
    //


    public function stepperData(Request $request)
    {
        if ($request->isMethod('post')) {

            if (auth('user')->check() && auth('user')->user()->role == 'candidate'){
                $oldUser =  auth()->user();
            }
            else{
                $oldUser = User::where('email', $request->input('email'))->first();
            }
            
            if(!($oldUser)){
            $newUsername = Str::slug($request->input('name'));
            $password= Str::random(8, 'alnum') . '@#';

            if(!empty($request->input('country'))){
                $countryData = explode('@#$?',$request->input('country'));
                $country=$countryData[0];
                $data['country']=$country;
                if(!empty($country)) $data['country']=$country;
                
                $code=$countryData[1];
                if(!empty($code)) $data['country_code']=$code;
            }

            $user = User::create([
                'name' => $request->input('name'),
                'email' => $request->input('email'),
                'username' => Str::slug($newUsername) . '_' . Str::random(5),
                'password' => Hash::make($password),
                'phone' => $request->input('phone'),
                'country' => $data['country'],
                'country_code' => $data['country_code'],
                'role' => 'candidate',
            ]);

            $lead = new Lead;
            $lead->name = $request->input('name');
            $lead->email = $request->input('email');
            $lead->phone = $request->input('phone');
            $lead->country_id = $request->input('country');
            $lead->url =  $request->input('url');
            $lead->source =  $request->input('source');
            $lead->user_id =  $user->id;
            $questions = [];
            $questions['location'] = $request->input('location');
            $questions['level'] = $request->input('level');
            $questions['journey'] = $request->input('journey');
            $jsonData = json_encode($questions);
            $lead->description = $jsonData;
            $lead = $lead->save();

            // try {
            //     $admins = Admin::all();
            //     foreach ($admins as $admin) {
            //         Notification::send($admin, new NewUserRegisteredNotification($admin, $user));
            //     }
            // } catch (\Throwable $th) {}
            $data = array('data'=>$user);
                Mail::send('mails.leadmail', $data, function($message) {
                   $message->to('contact@gradding.com', 'Gradding')->subject
                      ('Rate My Chance Lead');
                   $message->from('contact@gradding.com','Gradding Team');
                });

            if (checkMailConfig()) {
                if ($user->role == "candidate") {
                    $candidate_account_auto_activation_enabled = Setting::where("candidate_account_auto_activation", 1)->count();
                    if ($candidate_account_auto_activation_enabled) {
                        Notification::route('mail', $user->email)->notify(new CandidateCreateNotification($user, $password));
                    } else {
                        Notification::route('mail', $user->email)->notify(new CandidateCreateApprovalPendingNotification($user, $password));
                    }
                } elseif ($user->role == "company") {
                    $employer_auto_activation_enabled = Setting::where("employer_auto_activation", 1)->count();
                    if ($employer_auto_activation_enabled) {
                        Notification::route('mail', $user->email)->notify(new CompanyCreatedNotification($user, $password));
                    } else {
                        Notification::route("mail", $user->email)->notify(new CompanyCreateApprovalPendingNotification($user, $password));
                    }
                }
            }
            // session(['isLoggedIn' => true]);
            // Auth::guard('user')->login($user);
                return ['status' => 1, 'msg' => 'Lead Submit Successfully'];
            }
            else{
                $lead = new Lead;
                $lead->name = $request->input('name');
                $lead->email = $request->input('email');
                $lead->phone = $request->input('phone');
                $lead->country_id = $request->input('country');
                $lead->url =  $request->input('url');
                $lead->source =  $request->input('source');
                if (auth('user')->check() && auth('user')->user()->role == 'candidate'){
                    $lead->user_id =  auth()->user()->id;
                }
                else{
                    $lead->user_id =  $oldUser->id;
                }
                $questions = [];
                $questions['location'] = $request->input('location');
                $questions['level'] = $request->input('level');
                $questions['journey'] = $request->input('journey');
                $jsonData = json_encode($questions);
                $lead->description = $jsonData;
                $lead = $lead->save();
                // if(session(['isLoggedIn' => true])){
                //     Auth::guard('user')->login($oldUser);
                // }
                if($lead){
                    return ['status' => 1, 'msg' => 'Lead Submit Successfully'];
                }
            }
            return ['status' => 0, 'msg' => 'Data Not save in Lead Data'];
        }
    }



    public function popupData(Request $request)
    {
        if ($request->isMethod('post')) {
            if(!empty($request->input('name'))){
                $name = $request->input('name');
            }
            else{
                $name = $request->input('name1');
            }
            
            if (auth('user')->check() && auth('user')->user()->role == 'candidate'){
                $oldUser =  auth()->user();
            }
            else{
                $oldUser = User::where('email', $request->input('email'))->first();
            }
            if(!($oldUser)){
                $newUsername = Str::slug($request->input('name'));
                $password= Str::random(8, 'alnum') . '@#';
                if(!empty($request->input('country'))){
                    $countryData = explode('@#$?',$request->input('country'));
                    $country=$countryData[0];
                    $data['country']=$country;
                    if(!empty($country)) $data['country']=$country;
                    
                    $code=$countryData[1];
                    if(!empty($code)) $data['country_code']=$code;
                }
    
                $user = User::create([
                    'name' => $request->input('name'),
                    'email' => $request->input('email'),
                    'username' => Str::slug($newUsername) . '_' . Str::random(5),
                    'password' => Hash::make($password),
                    'phone' => $request->input('phone'),
                    'country' => $data['country'],
                    'country_code' => $data['country_code'],
                    'role' => 'candidate',
                ]);

                $lead = new Lead;
                $lead->name = $name;
                $lead->email = $request->input('email');
                $lead->phone = $request->input('phone');
                $lead->country_id = $request->input('country');
                $lead->url =  $request->input('url');
                $lead->source =  $request->input('source');
                $lead->user_id =  $user->id;
                $questions = [];
                $questions['date'] = $request->input('date');
                $questions['intake'] = $request->input('intake');
                $jsonData = json_encode($questions);
                $lead->description = $jsonData;
                $lead = $lead->save();

                // try {
                //     $admins = Admin::all();
                //     foreach ($admins as $admin) {
                //         Notification::send($admin, new NewUserRegisteredNotification($admin, $user));
                //     }
                // } catch (\Throwable $th) {}

                // $data = array('data'=>$user);
                // Mail::send('mails.booksessionMail', $data, function($message) {
                //    $message->to('contact@gradding.com', 'Gradding')->subject
                //       ('Book a Free Session Lead');
                //    $message->from('contact@gradding.com','Gradding Team');
                // });

                if (checkMailConfig()) {
                    if ($user->role == "candidate") {
                        $candidate_account_auto_activation_enabled = Setting::where("candidate_account_auto_activation", 1)->count();
                        if ($candidate_account_auto_activation_enabled) {
                            Notification::route('mail', $user->email)->notify(new CandidateCreateNotification($user, $password));
                        } else {
                            Notification::route('mail', $user->email)->notify(new CandidateCreateApprovalPendingNotification($user, $password));
                        }
                    } elseif ($user->role == "company") {
                        $employer_auto_activation_enabled = Setting::where("employer_auto_activation", 1)->count();
                        if ($employer_auto_activation_enabled) {
                            Notification::route('mail', $user->email)->notify(new CompanyCreatedNotification($user, $password));
                        } else {
                            Notification::route("mail", $user->email)->notify(new CompanyCreateApprovalPendingNotification($user, $password));
                        }
                    }
                }
                // session(['isLoggedIn' => true]);
                // Auth::guard('user')->login($user);
                return ['status' => 1, 'msg' => 'Lead Submit Successfully'];
            }
            else{
                    $lead = new Lead;
                    $lead->name = $name;
                    $lead->email = $request->input('email');
                    $lead->phone = $request->input('phone');
                    $lead->country_id = $request->input('country');
                    $lead->url =  $request->input('url');
                    $lead->source =  $request->input('source');
                    if (auth('user')->check() && auth('user')->user()->role == 'candidate'){
                        $lead->user_id =  auth()->user()->id;
                    }
                    else{
                        $lead->user_id =  $oldUser->id;
                    }
                    $questions = [];
                    $questions['date'] = $request->input('date');
                    $questions['intake'] = $request->input('intake');
                    $jsonData = json_encode($questions);
                    $lead->description = $jsonData;
                    $lead = $lead->save();
                    // if(Auth::guard('user')){
                    //     Auth::guard('user')->login($oldUser);
                    // }
                    if($lead){
                        return ['status' => 1, 'msg' => 'Lead Submit Successfully'];
                    }            
                    }
            return ['status' => 0, 'msg' => 'Data Not save in Lead Data'];
        }
    }



    public function contactDetails(Request $request)
    {
        $request->validate([
            'name' => 'required| string| max:50',
            'email' => 'required| email| max:255',
            'phone' => 'required | min:9| max:255',
          ]);

        $data['name'] = $request->name;
        $data['email'] = $request->email;
        $data['phone'] = $request->phone;
        $data['description'] = $request->description;
        $data['url'] = $request->url;
        $data['source'] = $request->source;

        $contact = Lead::create($data);

        if (!empty($contact)) {
            return ['status' => 1, 'msg' => 'We Will Contact You Soon'];
        }
    
        return ['status' => 0, 'msg' => 'Something Went Wrong'];

    }
}
