<?php

namespace App\Http\Controllers;

use App\DataTables\EmailTemplatesDatatable;
use Illuminate\Http\Request;
use App\Email_templates;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;

class EmailTemplateController extends Controller
{


    public function create(Request $request){

        if($request->isMethod('post')):


                 $request->validate(['template_name' => 'required', 'type'=>'required']);

                if($request->input('type') == 'header/footer')
                    $request->validate(['template_head_image' => 'required', 'template_footer_image'=>'required']);

                if($request->input('type') == 'image')
                    $request->validate(['body_image' => 'required']);



                DB::beginTransaction();

                        $data =  ['template_name' => $request->template_name, 'client_id' => Auth::user()->id ,'type'=>$request->type ];
                        $email =  Email_templates::query()->create($data);

                        if($request->input('type') == 'header/footer'):

                            if($request->has('template_head_image'))
                            {
                                $name1 = auth()->user()->id.'_'.uniqid().'_hd.jpg';
                                $file = request()->file('template_head_image');
                                $file->storePubliclyAs('public/template',$name1);

                                $email->update(['template_head_image' =>$name1]);

                            }

                            if($request->has('template_footer_image'))
                            {
                                $name2 = auth()->user()->id.'_'.uniqid().'_ft.jpg';
                                $file = request()->file('template_footer_image');
                                $file->storePubliclyAs('public/template',$name2);

                                $email->update(['template_footer_image' =>$name2]);
                            }

                        endif;


                        if($request->input('type') == 'image'):

                        if($request->has('body_image'))
                        {
                            $body = auth()->user()->id.'_'.uniqid().'body_image.jpg';
                            $file = request()->file('body_image');
                            $file->storePubliclyAs('public/template',$body);
                            $email->update(['body_image' =>$body]);

                        }

                        endif;


                DB::commit();;


                return redirect()->route('mail.template.index')->with('success', 'New email template added successfully');


        endif;

        return view('email_templates.new_email_template');

    }

    public function index(EmailTemplatesDatatable $datatable){

        return $datatable->render('email_templates.view_email_tempate');

    }

    public function preview($id){

        $item = Email_templates::find($id);

        return $item->type == 'image' ? view('email_templates.preview_image_template',compact('item')) :
            view('email_templates.preview_email_template',compact('item'));
    }

    public function edit(Request $request,$id){

        $item = Email_templates::find($id);

        return $request->isMethod('post') ? $this->update($request,$item) :
            (
             $item->type == 'image' ? view('email_templates.edit_email_template',compact('item')) :
                view('email_templates.edit_header_footer_template',compact('item'))
            );
    }

    public function update(Request $request,$item)
    {
        $data = $request->validate(
            [
                'template_name'=>'required'
            ]
        );
        DB::beginTransaction();
            $item->update($data);

            if($request->has('body_image'))
            {
                $body = auth()->user()->id.'_'.uniqid().'body_image.jpg';
                $file = request()->file('body_image');
                $file->storePubliclyAs('public/template',$body);
                Storage::delete("public/template/{$item->body_image}");  //delete the old image
                $item->update(['body_image' =>$body]);

            }

            if($request->has('template_head_image'))
            {
                $name1 = auth()->user()->id.'_'.uniqid().'_hd.jpg';
                $file = request()->file('template_head_image');
                $file->storePubliclyAs('public/template',$name1);
                Storage::delete("public/template/{$item->template_head_image}");  //delete the old image
                $item->update(['template_head_image' =>$name1]);

            }

            if($request->has('template_footer_image'))
            {
                $name2 = auth()->user()->id.'_'.uniqid().'_ft.jpg';
                $file = request()->file('template_footer_image');
                $file->storePubliclyAs('public/template',$name2);
                Storage::delete("public/template/{$item->template_footer_image}");  //delete the old image
                $item->update(['template_footer_image' =>$name2]);
            }

        DB::commit();

            return redirect()->route('mail.template.index')->with('success','Template Successfully Updated');
    }

    public function delete($id){

        $item = Email_templates::find($id);

        Storage::delete("public/template/{$item->body_image}");
        Storage::delete("public/template/{$item->template_footer_image}");
        Storage::delete("public/template/{$item->template_head_image}");
        $item->delete();

        return redirect()->route('mail.template.index')->with('success', 'Email template was DELETED successfully');
    }

}
