<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
use App\Models\Branch;
use App\Models\Department;
use App\Models\purchaseoldcar;
use App\Models\carcompany;
use App\Exports\ExportDepartment;
use Maatwebsite\Excel\Facades\Excel;
use Auth, DB, Mail, Validator, File, DataTables, Exception;
use App\Imports\ImportDepartment;

class purchaseoldcarController extends Controller
{
    public function __construct(){
        $this->middleware('permission:purchaseoldcar-create', ['only' => ['create']]);
        $this->middleware('permission:purchaseoldcar-edit', ['only' => ['edit']]);
        $this->middleware('permission:purchaseoldcar-view', ['only' => ['view']]);
        $this->middleware('permission:purchaseoldcar-delete', ['only' => ['delete']]);
    }
//  construct

//  index 
    public function index(Request $request){
        if($request->ajax()){
            $data = purchaseoldcar::select('*')->orderBy('id' , 'desc')->get();
            
                return Datatables::of($data)
                    ->addIndexColumn()
                    ->addColumn('action', function($data){
                        $return = '<div class="btn-group">';

                        if(auth()->user()->can('purchaseoldcar-view')){
                            $return .= '<a href="'.route('purchaseoldcar.view',['id' => base64_encode($data->id)]).'" class="btn btn-default btn-xs">
                                            <i class="fa fa-eye"></i>
                                        </a> &nbsp;';
                         }   
                        
                      if(auth()->user()->can('purchaseoldcar-edit')){
                            $return .= '<a href="'.route('purchaseoldcar.edit',['id' => base64_encode($data->id)]).'" class="btn btn-default btn-xs">
                                            <i class="fa fa-pencil"></i>
                                        </a> &nbsp;';
                       }   

                      if (auth()->user()->can('purchaseoldcar-delete')) {
                            $return .= '<a href="javascript:;" class="btn btn-default btn-xs dropdown-toggle" data-toggle="dropdown">
                                                <i class="fa fa-bars"></i>
                                            </a> &nbsp;
                                            <ul class="dropdown-menu">
                                                <li><a class="dropdown-item" href="javascript:;" onclick="change_status(this);" data-status="active" data-id="' . base64_encode($data->id) . '">Active</a></li>
                                                <li><a class="dropdown-item" href="javascript:;" onclick="change_status(this);" data-status="inactive" data-id="' . base64_encode($data->id) . '">Inactive</a></li>
                                                <li><a class="dropdown-item" href="javascript:;" onclick="change_status(this);" data-status="deleted" data-id="' . base64_encode($data->id) . '">Delete</a></li>
                                            </ul>';
                        }

                        $return .= '</div>';

                        return $return;
                    })

                
                    ->editColumn('status', function ($data) {
                        if ($data->status == 'active') {
                            return '<span class="badge badge-pill badge-success">Active</span>';
                        } else if ($data->status == 'inactive') {
                            return '<span class="badge badge-pill badge-warning">Inactive</span>';
                        } else if ($data->status == 'deleted') {
                            return '<span class="badge badge-pill badge-danger">Deleted</span>';
                        }else{
                            return '-';
                        }
                    })

                    ->rawColumns([ 'action' ,'status'])
                    ->make(true);
            }
        return view('purchaseoldcar.index');
    }
//  index 

// create /
    public function create(Request $request){
        
        $data = purchaseoldcar::get();
        $carcompany = carcompany::get();
        return view('purchaseoldcar.create')->with(['data' => $data,'carcompany' => $carcompany]);
    }
//  create /
//  insert 
    public function insert(Request $request){
        if($request->ajax()){
            return true ;
        }
        $crud = [
   
                'id' => $request->id,
                'seller_detail' => $request->seller_detail,
                'company_name' => $request->company_name,
                'variant' => $request->variant,
                'manufacturing_year' => $request->manufacturing_year,
                'registration_number' => $request->registration_number,
                'chassis_number' => $request->chassis_number,
                'engine_number' => $request->engine_number,
                'colour' => $request->colour,
                'time' => $request->time,
                'amount' => $request->amount,
                'exchange_bonus' => $request->exchange_bonus,
                'amount_in_words' => $request->amount_in_words,
                'HPA' => $request->HPA,
                'car_status' => $request->car_status,
                'status' => 'active',
                'created_at' => date('Y-m-d H:i:s'),
                'created_by' => auth()->user()->id,
                'updated_at' => date('Y-m-d H:i:s'),
                'updated_by' => auth()->user()->id
        ];
        
        DB::beginTransaction();
        try {
            DB::enableQueryLog();
            $last_id = purchaseoldcar::insertGetId($crud);
            if ($last_id) {
                
                DB::commit();
                return redirect()->route('purchaseoldcar')->with('success', 'Record inserted successfully');
            } else {
                DB::rollback();
                return redirect()->back()->with('error', 'Failed to insert record')->withInput();
            }
        } catch (\Throwable $th) {
            DB::rollback();
            return redirect()->back()->with('error', 'Something went wrong, please try again later')->withInput();
        }
    }
//  insert /

//  view /
    public function view(Request $request){  
        $id = base64_decode($request->id);
                                
        $data = purchaseoldcar::select('*')->where(['id' => $id])->first();
        // $country = purchaseoldcar::select('obf_exchange.*')->where(['status'=>'active'])->get(); 
        $carcompany = carcompany::get();
        return view('purchaseoldcar.view')->with(['data' => $data,'carcompany' => $carcompany]);
        
    }
// view /

// edit /
    public function edit(Request $request){
        $id = base64_decode($request->id);
                                
        $data = purchaseoldcar::select('*')->where(['id' => $id])->first();
        // $country = purchaseoldcar::select('obf_exchange.*')->where(['status'=>'active'])->get(); 
        $carcompany = carcompany::get();
        return view('purchaseoldcar.edit')->with(['data' => $data,'carcompany' => $carcompany]);
        
    }
// edit /

//  update 
    public function update(Request $request){
        if($request->ajax()){
            return true ;
        }
       // $branch_admin=$request->branch_admin ? 1 : NULL;
        $crud = [
            'id' => $request->id,
            'seller_detail' => $request->seller_detail,
            'company_name' => $request->company_name,
            'variant' => $request->variant,
            'manufacturing_year' => $request->manufacturing_year,
            'registration_number' => $request->registration_number,
            'chassis_number' => $request->chassis_number,
            'engine_number' => $request->engine_number,
            'colour' => $request->colour,
            'time' => $request->time,
            'amount' => $request->amount,
            'exchange_bonus' => $request->exchange_bonus,
            'amount_in_words' => $request->amount_in_words,
            'HPA' => $request->HPA,
            'status' => 'active',
            'updated_at' => date('Y-m-d H:i:s'),
            'updated_by' => auth()->user()->id
        ];
       
        
        DB::beginTransaction();
        try {
            DB::enableQueryLog();
            $update = purchaseoldcar::where(['id' => $request->id])->update($crud);
            if($update){
                DB::commit();
                return redirect()->route('purchaseoldcar')->with('success', 'Record updated successfully');
            } else {
                DB::rollback();
                return redirect()->back()->with('error', 'Failed to update record')->withInput();
            }
        } catch (\Throwable $th) {
            DB::rollback();
            return redirect()->back()->with('error', 'Something went wrong, please try again later')->withInput();
        }
    }
//  update /

//  change-status /
    public function change_status(Request $request){
        if (!$request->ajax()) { exit('No direct script access allowed'); }
            
            $id = base64_decode($request->id);
            $data = purchaseoldcar::where(['id' => $id])->first();
       
            if(!empty($data)){
                $update = purchaseoldcar::where(['id' => $id])->update(['status' => $request->status, 'updated_at' => date('Y-m-d H:i:s')]);
                if($update){
                    return response()->json(['code' => 200]);
                }else{
                    return response()->json(['code' => 201]);
                }
            }else{
                return response()->json(['code' => 201]);
            }
    }
/* change-status /

/* Export /
   /* public function export(Request $request){
        if(isset($request->slug) && $request->slug != null){
            $slug = $request->slug;
        }else{
            $slug = 'all';
        }

        $name = 'all_city_'.Date('YmdHis').'.xlsx';

        try {
            return Excel::download(new ExportDepartment($slug), $name);
        }catch(\Exception $e){
            return redirect()->back()->with('error', $e->getMessage());
        }
    }*/
/* Export /
/* Import /
/*public function import(Request $request){
       
    if(Excel::import(new ImportDepartment, $request->file('file')->store('file'))){
        return redirect()->route('department')->with('sucess' ,'File Imported Sucessfully');
    }else{
        return redirect()->route('department')->with('error' ,'Faild To Import File!');
    }
}*/
//  Import /
}