<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use App\Models\blog_content;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail;
use DerekCodes\TurnstileLaravel\TurnstileLaravel;


class BlogController extends Controller
{
    public function AddBlog()
    {
        if (!Auth::check()) {
            return redirect('admin');
        }
        return view('auth.add-blog');
    }
    public function addBlogUser(Request $request)
    {
        if (!Auth::check()) {
            return redirect('admin');
        }
        $date_blog =  $request->input('date_blog');
        $person_name =  $request->input('person_name');
        $heading_blog =  $request->input('heading_blog');
        $img_alt =  $request->input('img_alt');
        $content_blog =  $request->input('content_blog');
        $title =  $request->input('title');
        $keyword =  $request->input('keyword');
        $canonical =  $request->input('canonical');
        $description =  $request->input('description');
        $og =  $request->input('og_title');
        $og_site_name =  $request->input('og_site_name');
        $og_url =  $request->input('og_url');
        $og_description =  $request->input('og_description');
        $og_type =  $request->input('og_type');
        $og_image =  $request->input('og_image');
        $script =  $request->input('script');
        $slug_url =  $request->input('slug_url');
        $b_heading =  $request->input('b_heading');

        //    for file upload

        $files = $request->file('image_blog');
        $fname = $files->getClientOriginalName();
        $location = 'images/blog/';
        // Upload file
        $files->move($location, $fname);


        $data = array(
            'date_blog' => $date_blog,
            'person_name' => $person_name,
            'heading_blog' => $heading_blog,
            'image_blog' => $fname,
            'content_blog' => $content_blog,
            'title' => $title,
            'keyword' => $keyword,
            'canonical' => $canonical,
            'img_alt' => $img_alt,
            'description' => $description,
            'og' => $og,
            'og_site_name' => $og_site_name,
            'og_url' => $og_url,
            'og_description' => $og_description,
            'og_type' => $og_type,
            'og_image' => $og_image,
            'script' => $script,
            'slug_url' => $slug_url,
            'b_heading' => $b_heading
        );

        DB::table('blog_contents')->insert($data);
        return redirect('view-blog')->with('message2', 'Succesfully Added !!');
    }
    public function viewBlog()
    {

        $blogs = DB::table('blog_contents')->get();
        return view('auth.view-blog')->with(compact('blogs'));
    }
    public function editJob($id)
    {
        if (!Auth::check()) {
            return redirect('admin');
        }
        $blogs = DB::table('blog_contents')
            ->where('id', $id)
            ->first();
        return view('auth.editjob')->with(compact('blogs'));
    }
    public function updateBlog(Request $request)
    {
        if (!Auth::check()) {
            return redirect('admin');
        }

        $id = $request->input('id');
        $date_blog =  $request->input('date_blog');
        $person_name =  $request->input('person_name');
        $heading_blog =  $request->input('heading_blog');
        //    $image_blog =  $request->file('image_blog');
        $img_alt =  $request->input('img_alt');
        $content_blog =  $request->input('content_blog');
        $title =  $request->input('title');
        $keyword =  $request->input('keyword');
        $canonical =  $request->input('canonical');
        $description =  $request->input('description');
        $og =  $request->input('og_title');
        $og_site_name =  $request->input('og_site_name');
        $og_url =  $request->input('og_url');
        $og_description =  $request->input('og_description');
        $og_type =  $request->input('og_type');
        $og_image =  $request->input('og_image');
        $script =  $request->input('script');
        $slug_url =  $request->input('slug_url');
        $b_heading =  $request->input('b_heading');

        $old_image = $request->input('old_image_blog');
        $new_image = $request->file('image_blog');

        if ($new_image) {
            // Delete the old image
            $image_path = public_path('/images/blog/' . $old_image);
            if (file_exists($image_path)) {
                unlink($image_path);
            }

            // Upload the new image
            $new_image_name = $new_image->getClientOriginalName();
            $new_image->move(public_path('/images/blog/'), $new_image_name);
        } else {
            $new_image_name = $old_image;
        }



        $page = DB::table('blog_contents')->where('id', $id)
            ->update([
                'date_blog' => $date_blog,
                'person_name' => $person_name,
                'heading_blog' => $heading_blog,
                'image_blog' => $new_image_name,
                'img_alt' => $img_alt,
                'content_blog' => $content_blog,
                'title' => $title,
                'keyword' => $keyword,
                'canonical' => $canonical,
                'description' => $description,
                'og' => $og,
                'og_site_name' => $og_site_name,
                'og_url' => $og_url,
                'og_description' => $og_description,
                'og_type' => $og_type,
                'og_image' => $og_image,
                'script' => $script,
                'slug_url' => $slug_url,
                'b_heading' => $b_heading

            ]);
        return redirect('view-blog')->with('message2', 'Succesfully updated !!');
    }
    public function showAll()
    {
        $blogs = blog_content::orderBy('date_blog', 'DESC')->get();
        return view('blog.index', compact('blogs'));
    }
    public function show($slug)
    {
        $allblogs = blog_content::orderBy('date_blog', 'Desc')->get();
        $blogs = DB::table('blog_contents')->where('slug_url', $slug)->first();

        if ($blogs) {
            return view('blog.show', compact('blogs', 'allblogs'));
        }
        return redirect('/');
    }
    public function deleteBlog(Request $request, $id)
    {
        if (!Auth::check()) {
            return redirect('admin');
        }
        $fname = $request->input('image_blog');
        $file = public_path("images/blog/$fname");

        if (File::delete($file)) {
            DB::table('blog_contents')->where('id', $id)->delete();
            return redirect('view-blog')->with('message1', 'Successfully deleted!');
        } else {
            return redirect('view-blog')->with('message1', 'Failed to delete file.');
        }
    }
    public function Home()
    {

        $blogs = blog_content::orderBy('date_blog', 'DESC')->take(3)->get();
        return view('home', compact('blogs'));
    }
    public function adsForm(Request $request)
    {
        $validated = $request->validate([
            'cf-turnstile-response' => 'required',
            'care' => 'required',
            'name' => 'required',
            'email' => 'required|email:rfc,dns',
            'phone' => 'required|numeric',
            'location' => 'required',

        ]);

        $turnstile = new TurnstileLaravel;
        $response = $turnstile->validate($request->get('cf-turnstile-response'));
        if ($response['status'] == true) {
            $email = $request->input('email');
            $care = $request->input('care');
            $name = $request->input('name');
            $phone = $request->input('phone');
            $location = $request->input('location');
            $msg = $request->input('msg');

            if ($email) {
                $data = [
                    'care' => $care,
                    'name' => $name,
                    'email' => $email,
                    'phone' => $phone,
                    'location' => $location,
                    'msg' => $msg,
                ];
                Mail::mailer('sendgrid')->send('emails.contact', $data, function ($message) use ($data) {
                    // $message->to('rohith.johnandsmith@outlook.com')
                    //     ->to('cd.tl@johnandsmith.co.uk')
                    //     ->to('anusree@johnandsmith.co.in')
                   $message->to(['m.badulescu@nursesgroup.co.uk', 'hr.tl@nursesgroup.co.uk', 'hr@nursesgrouphomecare.co.uk','anusree@johnandsmith.co.in'])

                        ->subject("New Enquiry Received - Immediate Attention Required");
                });

                Mail::mailer('sendgrid')->send('emails.ads-response', $data, function ($message) use ($data) {
                    $message->to($data["email"])
                        ->subject("Your Enquiry Has Been Received - Nurses Group Homecare");
                });
                session()->flash('success', 'Your care enquiry has been successfully submitted. Our care coordinator will review your submission and get back to you shortly. We appreciate your trust in Nurses Group Homecare.');
                return redirect()->back();
            }
        } else {

            // session()->flash('oops', 'Oops! Something went wrong and the email was not sent. Please try again.');
            abort(419, 'Page Expired');
        }
    }

    public function ContactForm(Request $request)
    {
        $validated = $request->validate([
            'cf-turnstile-response' => 'required',
            'care' => 'required',
            'name' => 'required',
            'email' => 'required|email:rfc,dns',
            'phone' => 'required|numeric',
            'location' => 'required',

        ]);

        $turnstile = new TurnstileLaravel;
        $response = $turnstile->validate($request->get('cf-turnstile-response'));
        if ($response['status'] == true) {
            $email = $request->input('email');
            $care = $request->input('care');
            $name = $request->input('name');
            $phone = $request->input('phone');
            $location = $request->input('location');
            $msg = $request->input('msg');

            if ($email) {
                $data = [
                    'care' => $care,
                    'name' => $name,
                    'email' => $email,
                    'phone' => $phone,
                    'location' => $location,
                    'msg' => $msg,
                ];
                Mail::mailer('sendgrid')->send('emails.contact', $data, function ($message) use ($data) {
                    $message->to(['m.badulescu@nursesgroup.co.uk', 'hr.tl@nursesgroup.co.uk', 'hr@nursesgrouphomecare.co.uk'])
                        //->to('cord@nursesgroup.co.uk')
                        //->bcc('hrhomecare2023@gmail.com')
                        ->subject("New Enquiry Received - Immediate Attention Required");
                });
                // Mail::mailer('sendgrid')->send('emails.contact', $data, function ($message) use ($data) {
                //     $message->from('hr@nursesgrouphomecare.co.uk', 'Nurses Group Homecare')->to('manager@nursesgrouphomecare.co.uk')
                //        ->bcc('hrhomecare2023@gmail.com')
                //     ->subject("New Enquiry Received - Immediate Attention Required");
                // });
                Mail::mailer('sendgrid')->send('emails.contact-applicant-response', $data, function ($message) use ($data) {
                    $message->to($data["email"])
                        ->subject("Your Enquiry Has Been Received - Nurses Group Homecare");
                });
                session()->flash('success', 'Your care enquiry has been successfully submitted. Our care coordinator will review your submission and get back to you shortly. We appreciate your trust in Nurses Group Homecare.');
                return redirect()->back();
            }
        } else {

            // session()->flash('oops', 'Oops! Something went wrong and the email was not sent. Please try again.');
            abort(419, 'Page Expired');
        }
    }

    public function AssessmenttForm(Request $request)
    {

        $validated = $request->validate([
            'cf-turnstile-response' => 'required',
            'care' => 'required',
            'name' => 'required',
            'email' => 'required|email:rfc,dns',
            'phone' => 'required|numeric',
            'location' => 'required',

        ]);
        $turnstile = new TurnstileLaravel;
        $response = $turnstile->validate($request->get('cf-turnstile-response'));
        if ($response['status'] == true) {
            $care = $request->get('care');
            $name = $request->input('name');
            $email = $request->input('email');
            $phone = $request->input('phone');
            $location = $request->input('location');

            if ($email) {
                $data = [
                    'care' => $care,
                    'name' => $name,
                    'email' => $email,
                    'phone' => $phone,
                    'location' => $location,
                    'msg' => $request->input('msg'),
                ];
                Mail::mailer('sendgrid')->send('emails.free-assessment', $data, function ($message) use ($data) {
                    $message->to(['m.badulescu@nursesgroup.co.uk', 'hr.tl@nursesgroup.co.uk', 'hr@nursesgrouphomecare.co.uk'])
                       // ->bcc('hrhomecare2023@gmail.com')
                        ->subject("New Enquiry Received - Immediate Attention Required");
                });
                Mail::mailer('sendgrid')->send('emails.free-assessment', $data, function ($message) use ($data) {
                    $message->to('manager@nursesgrouphomecare.co.uk')
                        ->bcc('hrhomecare2023@gmail.com')
                        ->subject("New Enquiry Received - Immediate Attention Required");
                });
                Mail::mailer('sendgrid')->send('emails.free-assessment-response', $data, function ($message) use ($data) {
                    $message->to($data["email"])
                        ->subject("Your Enquiry Has Been Received - Nurses Group Homecare");
                });

                //for ses
                // Mail::send('emails.free-assessment', $data, function ($message) use ($data) {
                //     $message->to('care@nursesgrouphomecare.co.uk', $data["care"], $data["name"], $data["email"], $data["phone"], $data["location"], $data["msg"])
                //     ->bcc('hrhomecare2023@gmail.com')
                //     ->from('do_not_reply@nursesgrouphomecare.co.uk', "Do Not Reply - Nurses Group Homecare") 
                //     ->subject("New Enquiry Received - Immediate Attention Required");
                // });
                // Mail::send('emails.free-assessment', $data, function ($message) use ($data) {
                //     $message->to('manager@nursesgrouphomecare.co.uk', $data["care"], $data["name"], $data["email"], $data["phone"], $data["location"], $data["msg"])
                //     ->bcc('hrhomecare2023@gmail.com')
                //     ->from('do_not_reply@nursesgrouphomecare.co.uk', "Do Not Reply - Nurses Group Homecare") 
                //     ->subject("New Enquiry Received - Immediate Attention Required");
                // });
                // Mail::send('emails.free-assessment-response', $data, function ($message) use ($data) {
                //     $message->to($data["email"])
                //     ->from('do_not_reply@nursesgrouphomecare.co.uk', "Do Not Reply - Nurses Group Homecare") 
                //     ->subject("Your Enquiry Has Been Received - Nurses Group Homecare");
                // });

                session()->flash('success', 'Your care enquiry has been successfully submitted. Our care coordinator will review your submission and get back to you shortly. We appreciate your trust in Nurses Group Homecare.');
                return redirect()->back();
            }
        } else {
            // return redirect()->back()->withErrors($validated);
            abort(419, 'Page Expired');
        }
    }
    public function SubscribeForm(Request $request)
    {
        $email = $request->get('email');
        $data = array('emails' => $email);
        DB::table('subscribes')->insert($data);
        return redirect()->back()->with('subscribe', 'Successfully subscribed!');
    }
    public function ApplyNow(Request $request)
    {
        $request->validate([
            'cf-turnstile-response' => 'required',
            'first-name' => 'required|regex:/^[a-zA-Z]+$/u|max:100',
            'last-name' => 'required|regex:/^[a-zA-Z]+$/u|max:100',
            'email' => 'required|email:rfc,dns|max:100',
            'postal' => 'required',
            'job' => 'required',
            'phone' => 'required|numeric',
        ]);

        $turnstile = new TurnstileLaravel;
        $response = $turnstile->validate($request->get('cf-turnstile-response'));

        if ($response['status'] != true) {
            Log::warning('Turnstile validation failed', ['response' => $response]);
            return redirect()->back()
                ->withInput()
                ->withErrors(['captcha' => 'Security verification failed. Please refresh the page and try again.']);
        }

        $fname = $request->input('first-name');
        $lname = $request->input('last-name');
        $email = $request->input('email');
        $postal = $request->input('postal');
        $phone = $request->input('phone');
        $job = $request->input('job');

        $data = [
            'name' => $fname,
            'lname' => $lname,
            'email' => $email,
            'postal' => $postal,
            'phone' => $phone,
            'job' => $job,
        ];

        Log::info('Apply now submission', ['email' => $email]);
        
        try {
            Mail::mailer('sendgrid')->send('emails.apply-now', $data, function ($message) use ($data) {
                $message->to(['m.badulescu@nursesgroup.co.uk', 'hr.tl@nursesgroup.co.uk', 'hr@nursesgrouphomecare.co.uk','anusree@johnandsmith.co.in'])
                    ->subject("New Job Application Received - Homecare Website");
            });
            
            Mail::mailer('sendgrid')->send('emails.applicant-confirmation', $data, function ($message) use ($data) {
                $message->to($data["email"])
                    ->subject("Thank you for Applying!");
            });
        } catch (\Exception $e) {
            Log::error('Error sending email: ' . $e->getMessage(), ['trace' => $e->getTraceAsString()]);
            return redirect()->back()
                ->withInput()
                ->withErrors(['email_error' => 'There was an error processing your application. Please try again.']);
        }
        
        session()->flash('success', 'We are thrilled to have received your application. We are reviewing your application diligently and will reach out to you shortly.');
        return redirect()->back();
    }
}
