<?php

namespace App\Http\Controllers\OwnerPanel;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\ExpenseType;
use App\Models\Expense;
use Carbon\Carbon;
use Illuminate\Support\Facades\Hash;
use DB;
use Auth;

class OwnerExpenseController extends Controller
{
    public function index(Request $request)
    {
        // echo $cwoid;exit;
        $dataBag['chMenu'] = '';
        $cwo_id = Auth::user()->cwo_id;
        $expense_type_id = $request->input('expense_type_id');
        $start_date = $request->input('start_date');
        if($start_date != ''){
            $start_date = date("Y-m-d", strtotime($start_date));
        }
        $end_date = $request->input('end_date');
        if($end_date != ''){
            $end_date = date("Y-m-d", strtotime($end_date));
        }
        
        $data = Expense::with('expenseType')->where('cwo_id', $cwo_id)->where('is_active', '!=', 3)->orderBy('id', 'desc');

        if($expense_type_id != '') {
            $data->where('expense_type_id', $expense_type_id);
        }
        if($start_date != '') {
            $data->whereDate('expense_date', '>=', $start_date);
        } 
        if($end_date != '') {
            $data->whereDate('expense_date', '<=', $end_date);
        } 

        $dataCnt = $data->count();
        $data = $data->paginate(10);
        $dataBag['allRecords'] = $dataCnt;
        $dataBag['records'] = $data;
        // echo "<pre>";print_r($dataBag['records']->toArray());exit;
        $dataBag['expenseTypes'] = ExpenseType::where('is_active', 1)->orderBy('expense_type', 'asc')->get();
        return view('owner.expense.list', $dataBag);
    }


    /**
     * Show the form for creating a new resource.
     */
    public function create(Request $request)
    {
        $dataBag = array();
        $dataBag['chMenu'] = '';
        $dataBag['expenseTypes'] = ExpenseType::where('is_active', 1)->orderBy('expense_type', 'asc')->get();
        // echo "<pre>";print_r($dataBag['expenseTypes']->toArray());exit;
        return view('owner.expense.create', $dataBag);
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        // echo "store";exit;
        $request->validate([
            'expense_type_id' => 'required',
            'expense_date' => 'required',
            'amount' => 'required|numeric',
            'is_active' => 'required'
        ],[
            'expense_type_id.required' => 'Please select an expense type.',
            'expense_date.required' => 'Please enter expense date.',
            'amount.required' => 'Please enter expense amount.',
            'is_active.required' => 'Please select a status.'
        ]);
        $expense_type_id = $request->input('expense_type_id');
        $description = $request->input('description');
        $reason = $request->input('reason');
        $expense_date = $request->input('expense_date');
        if($expense_date != ''){
            $expense_date = date("Y-m-d", strtotime($expense_date));
        }
        $amount = $request->input('amount');
        $is_active = $request->input('is_active');
        $cwo_id = Auth::user()->cwo_id;
        $loggedin_user_id = Auth::user()->id;
        $dt = Carbon::now();
        
        /*insert into expenses table starts*/
        $record = Expense::create([
                'cwo_id'=> $cwo_id,
                'expense_type_id'=> $expense_type_id,
                'loggedin_user_id'=> $loggedin_user_id,
                'description'=> $description,
                'reason'=> $reason,
                'expense_date'=> $expense_date,
                'amount'=> $amount,
                'is_active'=> $is_active,
                'created_at'=>$dt->toDayDateTimeString(),
                'updated_at'=>$dt->toDayDateTimeString()
            ]);
        /*insert into expenses table ends*/   

        return back()->with('success', 'Expense has been added successfully.')->with('msg_class', 'alert alert-success');
    }

    /**
     * Display the specified resource.
     */
    public function show(string $id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit($id)
    {
        // echo $cwoid . " - " . $unitid;exit;
        $dataBag = array();
        $dataBag['chMenu'] = '';
        $record = Expense::findorfail($id);
        $dataBag['details'] = $record;
        $dataBag['expenseTypes'] = ExpenseType::where('is_active', 1)->orderBy('expense_type', 'asc')->get();
        return view('owner.expense.edit', $dataBag);
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, $id)
    {
        // echo $id;exit;
        $request->validate([
            'expense_type_id' => 'required',
            'expense_date' => 'required',
            'amount' => 'required|numeric',
            'is_active' => 'required'
        ],[
            'expense_type_id.required' => 'Please select an expense type.',
            'expense_date.required' => 'Please enter expense date.',
            'amount.required' => 'Please enter expense amount.',
            'is_active.required' => 'Please select a status.'
        ]);
        $expense_type_id = $request->input('expense_type_id');
        $description = $request->input('description');
        $reason = $request->input('reason');
        $expense_date = $request->input('expense_date');
        if($expense_date != ''){
            $expense_date = date("Y-m-d", strtotime($expense_date));
        }
        $amount = $request->input('amount');
        $is_active = $request->input('is_active');
        // $cwo_id = Auth::user()->cwo_id;
        // $loggedin_user_id = Auth::user()->id;
        $dt = Carbon::now();
        /*update wash_categories table starts*/
        $data = Expense::findOrFail($id);
        $record = $data->update([
                'expense_type_id'=> $expense_type_id,
                // 'loggedin_user_id'=> $loggedin_user_id,
                'description'=> $description,
                'reason'=> $reason,
                'expense_date'=> $expense_date,
                'amount'=> $amount,
                'is_active'=> $is_active,
                'updated_at'=>$dt->toDayDateTimeString()
            ]);
        /*update wash_categories table ends*/
        return back()->with('success', 'Expense has been updated successfully.')->with('msg_class', 'alert alert-success');
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(string $id)
    {
        //
    }

    public function delete($id){
        $record = Expense::findorfail($id); // fetch the record
        $record->is_active = "3";
        $record->save();
        return back()->with('msg', 'Expense has been deleted successfully.')->with('msg_class', 'alert alert-success');
        
    }

    public function status_change_ajax(Request $request)
    {
        try {
            $record = Expense::where('id', $request->id)->first();
            if ($record != null) {
                $record->is_active = $request->status;
                $record->save();

                return response()->json(['message' => 'Status changed successfully', 'status' => 1], 200);
            } else {
                return response()->json(['message' => 'Body type not found', 'status' => 0], 401);
            }
        } catch (exception $e) {
        }
    }
}
