<?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');
            }

            $oldUser = User::where('email', $request->input('email'))->first();
            if (auth('user')->check() && auth('user')->user()->role == 'candidate'){
                $oldUser =  auth()->user();
            }
           
            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'=>$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);
                // }

                $data = array('data'=>$oldUser);
                Mail::send('mails.booksessionMail', $data, function($message) use($oldUser) {
                    $message->to($oldUser->email, 'Gradding')->subject
                        ('Rate My Chance Lead');
                    $message->from('contact@gradding.com','Gradding Team');
                });

                $data = array('data'=>$oldUser);
                Mail::send('mails.adminmail', $data, function($message) use($oldUser) {
                    $message->to('contact@gradding.com', 'Gradding')->subject
                        ('Rate My Chance Lead');
                    $message->from('contact@gradding.com','Gradding Team');
                });
            
                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');
            }
            
            $oldUser = User::where('email', $request->input('email'))->first();
            if (auth('user')->check() && auth('user')->user()->role == 'candidate'){
                $oldUser =  auth()->user();
            }
         
            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',
                ]);
                $oldUser =$user;
                $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');
                });
                // 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->service = $request->input('service');
                    $lead = $lead->save();
                    // if(Auth::guard('user')){
                    //     Auth::guard('user')->login($oldUser);
                    // }
                $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');
                });

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

                if($lead){
                    return ['status' => 1, 'msg' => 'Lead Submit Successfully'];
                }            
            return ['status' => 0, 'msg' => 'Data Not save in Lead Data'];
        }
    }



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

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


          $oldUser = User::where('email', $request->input('email'))->first();
            if (auth('user')->check() && auth('user')->user()->role == 'candidate'){
                $oldUser =  auth()->user();
            }
         
            if(!($oldUser)){
                $newUsername = Str::slug($request->name);
                $password= Str::random(8, 'alnum') . '@#';
                $data['country'] = NULL;
                $data['country_code'] = NULL;
                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(" ", $request->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',
                    'source' => $request->source,
                ]);
                $oldUser =$user;
                $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');
                });
                // session(['isLoggedIn' => true]);
                // Auth::guard('user')->login($user);
                // return ['status' => 1, 'msg' => 'Lead Submit Successfully'];
            }

                $lead = new Lead;
                $lead->name = $request->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->description =  $request->input('description');
                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 (!empty($lead)) {
                return ['status' => 1, 'msg' => 'We Will Contact You Soon'];
            }
            return ['status' => 0, 'msg' => 'Something Went Wrong'];
        }

    }


    public function booksessionMobile(Request $request)
    {
        $oldUser = User::where('email', $request->input('email'))->first();
        if (auth('user')->check() && auth('user')->user()->role == 'candidate'){
            $oldUser =  auth()->user();
        }
        
        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;
            $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');
                });

                $data = array('data'=>$oldUser);
                Mail::send('mails.adminmail', $data, function($message) use($oldUser) {
                    $message->to('contact@gradding.com', 'Gradding')->subject
                        ('PPC Form 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'];

    }
}