<?php

namespace App\Http\Controllers\Website;

use Carbon\Carbon;
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\Candidate;
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\Models\Newsletter_email;
use App\Notifications\CompanyCreatedNotification;
use App\Notifications\CandidateCreateNotification;
use App\Notifications\Admin\NewUserRegisteredNotification;
use App\Notifications\CompanyCreateApprovalPendingNotification;
use App\Notifications\CandidateCreateApprovalPendingNotification;
use Modules\Newsletter\Emails\NewsletterMail;

class leadController extends Controller
{
    //


    public function stepperData(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;
            }
            
                $parts = explode(" ", $name);
                $first = array_shift($parts);
                $last = array_pop($parts);
                $middle = implode(" ", $parts);

            $user = User::create([
                'name' => $first,
                'middle_name' => $middle,
                'last_name' => $last,
                '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',
            ]);
            $oldUser =$user;
            $user->password = $password;
            $data = array('data'=>$user);
                Mail::send('mails.booksessionMail', $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));
            //         }
            //     }
            // }
            $data = array('data'=>$oldUser);
            Mail::send('mails.welcome-mail', $data, function($message) use($oldUser) {
                $message->to($oldUser->email, 'Gradding')->subject
                ('Welcome to Gradding');
                $message->from('contact@gradding.com','Gradding Team');
        });
            // session(['isLoggedIn' => true]);
            // Auth::guard('user')->login($user);
            }
            
                $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['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($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;
                }

                $parts = explode(" ", $name);
                $first = array_shift($parts);
                $last = array_pop($parts);
                $middle = implode(" ", $parts);
    
                $user = User::create([
                    'name' => $first,
                    'middle_name' => $middle,
                    'last_name' => $last,
                    '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',
                ]);
                $user->password = $password;
                $oldUser =$user;
                $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));
                //         }
                //     }
                // }
                $data = array('data'=>$oldUser);
                Mail::send('mails.welcome-mail', $data, function($message) use($oldUser) {
                    $message->to($oldUser->email, 'Gradding')->subject
                    ('Welcome to Gradding');
                    $message->from('contact@gradding.com','Gradding Team');
            });
                // session(['isLoggedIn' => true]);
                // Auth::guard('user')->login($user);
                return ['status' => 1, 'msg' => 'Lead Submit Successfully'];
            }

                    $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');
                    $dateTime = Carbon::parse($request->input('date'));
                    $date = $dateTime->format('Y-m-d H:i:s');
                    $questions['date'] = $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'];

    }


    public function booksessionMobile(Request $request)
    {
        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->country)){
                $countryData = explode('@#$?',$request->country);
                $country=$countryData[0];
                $data['country']=$country;
                if(!empty($country)) $data['country']=$country;
                
                $code=$countryData[1];
                if(!empty($code)) $data['country_code']=$code;
            }
            $name = $request->input('name').' '.$request->input('lastName');
            $parts = explode(" ", $name);
            $first = array_shift($parts);
            $last = array_pop($parts);
            $middle = implode(" ", $parts);

            $user = User::create([
                'name' => $first,
                'middle_name' => $middle,
                'last_name' => $last,
                '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',
            ]);
            $oldUser = $user;

            
            // 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));
            //         }
            //     } 
            // }
                $user->password = $password;
                $data = array('data'=>$oldUser);
                    Mail::send('mails.welcome-mail', $data, function($message) use($oldUser) {
                        $message->to($oldUser->email, 'Gradding')->subject
                        ('Welcome to Gradding');
                        $message->from('contact@gradding.com','Gradding Team');
                });

        }        
                $lead = new Lead;
                $lead->name = $request->name. ' ' .$request->lastName;
                $lead->email = $request->email;
                $lead->phone = $request->phone;
                $lead->country_id = $request->country;
                $lead->url =  $request->url;
                $lead->source =  $request->source;
                $lead->city =  $request->city;
                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->date;
                $questions['intake'] = $request->intake;
                $jsonData = json_encode($questions);
                $lead->description = $jsonData;
                $lead = $lead->save();
                
                Candidate::where('user_id', $user->id)
                ->update(['city_id' => $request->city]);

                $data = array('data'=>$oldUser);
                Mail::send('mails.booksessionMail', $data, function($message) use($oldUser) {
                    $message->to($oldUser->email, 'Gradding')->subject
                    ('Book a Free Session Lead');
                    $message->from('contact@gradding.com','Gradding Team');
                });
            // if(Auth::guard('user')){
                    //     Auth::guard('user')->login($oldUser);
                    // }
                    if($lead){
                return ['status' => 1, 'msg' => 'We Will Contact You Soon'];
            }            
                
            return ['status' => 0, 'msg' => 'Something Went Wrong'];

    }



    public function newsletter(Request $request)
    {
        $lead = new Newsletter_email;
        $lead->email = $request->email;
        $lead->url =  $request->url;
        $lead->source =  $request->source;
        // if (auth('user')->check() && auth('user')->user()->role == 'candidate'){
        //     $lead->user_id =  auth()->user()->id;
        // }
        // else{    
        //     $lead->user_id =  $oldUser->id;
        // }
        $lead = $lead->save();
        
        if($lead){
            return ['status' => 1, 'msg' => 'We Will Contact You Soon'];
        }            
        
        return ['status' => 0, 'msg' => 'Something Went Wrong'];

    }
}