<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;
use App\Models\User;
use App\Models\Order;
use App\Models\OrderItem;



use Illuminate\Http\Request;
use App\Models\Product;


class AdminController extends Controller
{
    public function index()
    {
        if (session()->get('type') == 'Admin') {
            return view('Dashboard.index');
        }
        return redirect()->back();
    }

    public function products()
    {
        if (session()->get('type') == 'Admin') {
            $products = Product::all();
            return view('Dashboard.products', compact('products'));
        }
        return redirect()->back();
    }
    // public function addNewProduct()
    // {
    //     $validated = request()->validate([
    //         'name' => 'required',
    //         'price' => 'required',
    //         'description' => 'required',
    //         'image' => 'required|image|mimes:jpeg,png,jpg,gif,
    //         svg|max:2048',
    //         'quantity' => 'required',


    //     ]);

    //     if (request()->hasFile('file')) {
    //         $file = request()->file('file');
    //         $fileName = $file->getClientOriginalName();
    //         $file->move('uploads/products/', $fileName);
    //         request()->merge([
    //             'picture' => $fileName,
    //         ]);
    //     }
    //     Product::create(request()->all());
    //     // $product = new Product();
    //     // $product->name = $data->input('name');
    //     // $product->picture = $data->file('file')->getClientOriginalName();
    //     // $data->file('file')->move('uploads/products/', $product->picture);
    //     // $product->description = $data->input('description');
    //     // $product->price = $data->input('price');
    //     // $product->quantity = $data->input('quantity');
    //     // $product->category = $data->input('category');
    //     // $product->type = $data->input('type');

    //     // $abc = $product->save();
    //     // dd($abc);
    //     return redirect()->back()->with('success', 'Product Added Successfully');
    //     // return view('Dashboard.addNewProduct');
    // }

    //mass assignment for adding new product
    public function addNewProduct(Request $request)
    {
        if (session()->get('type') == 'Admin') {
            $validated = $request->validate([
                'name' => 'required',
                'price' => 'required|numeric',
                'description' => 'required',
                'file' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:10240',
                'quantity' => 'required|numeric',
                'category' => 'required',
                'type' => 'required',
            ]);

            if ($request->hasFile('file')) {
                $file = $request->file('file');
                $fileName = time() . '_' . $file->getClientOriginalName();
                $file->move(public_path('uploads/products'), $fileName);
                $validated['picture'] = $fileName;
            }

            Product::create($validated);

            return redirect()->back()->with('success', 'Product Added Successfully');
        }
        return redirect()->back();
    }


    //normal assignment for update
    // public function updateProduct(Request $request)
    // {
    //     $validated = $request->validate([
    //         'name' => 'required',
    //         'price' => 'required|numeric',
    //         'description' => 'required',
    //         'file' => 'image|mimes:jpeg,png,jpg,gif,svg|max
    //         :2048',
    //         'quantity' => 'required|numeric',
    //         'category' => 'required',
    //         'type' => 'required',
    //     ]);
    //     if ($request->hasFile('file')) {
    //         $file = $request->file('file');
    //         $fileName = time() . '_' . $file->getClientOriginalName();
    //         $file->move(public_path('uploads/products'), $fileName);
    //         $validated['picture'] = $fileName;
    //     }
    //     $product = Product::find($request->id);
    //     $product->name = $validated['name'];
    //     $product->price = $validated['price'];
    //     $product->description = $validated['description'];
    //     $product->quantity = $validated['quantity'];
    //     $product->category = $validated['category'];
    //     $product->type = $validated['type'];
    //     $product->save();
    //     return redirect()->back()->with('success', 'Product Updated Successfully');
    // }

    //mass assignment for update
    public function updateProduct(Request $request)
    {
        if (session()->get('type') == 'Admin') {
            $validated = $request->validate([
                'name' => 'required',
                'price' => 'required|numeric',
                'description' => 'required',
                'quantity' => 'required|numeric',
                'category' => 'required',
                'type' => 'required',
                'file' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
            ]);

            $product = Product::find($request->input('id'));

            if ($request->hasFile('file')) {
                $file = $request->file('file');
                $fileName = time() . '_' . $file->getClientOriginalName();
                $file->move(public_path('uploads/products'), $fileName);
                $validated['picture'] = $fileName;
            }
            $product->update($validated);
            return redirect()->back()->with('success', 'Product Updated Successfully');
        }
        return redirect()->back();
    }

    public function deleteProduct($id)
    {
        if (session()->get('type') == 'Admin') {
            $product = Product::find($id);
            $product->delete();
            return redirect()->back()->with('success', 'Product Deleted Successfully');
        }
        return redirect()->back();
    }

    public function profile()
    {
        if (session()->get('type') == 'Admin') {
            $user = User::find(session()->get('id'));
            return view('Dashboard.profile', compact('user'));
        }
        return redirect()->back();
    }

    public function customers()
    {
        if (session()->get('type') == 'Admin') {
            $customers = User::where('type', 'customer')->get();
            return view('Dashboard.customers', compact('customers'));
        }
        return redirect()->back();
    }

    public function changeUserStatus($status, $id)
    {
        if (session()->get('type') == 'Admin') {
            $user = User::find($id);
            $user->status = $status;
            $user->save();
            return redirect()->back()->with('success', 'User Status Changed Successfully');
        }
        return redirect()->back();
    }

    //old orders
    public function orders()
    {
        if (session()->get('type') == 'Admin') {
            $orderItems = DB::table('order_items')
                ->join('products', 'order_items.productId', 'products.id')
                ->select('products.name', 'products.picture', 'order_items.*')
                ->get();

            $orders = DB::table('users')
                ->join('orders', 'orders.customerId', 'users.id')
                ->select('orders.*', 'users.name', 'users.email', 'users.status as userStatus')
                ->get();
            return view('Dashboard.orders', compact('orders', 'orderItems'));
        }
        return redirect()->back();
    }

    //new orders
    // public function orders()
    // {
    //     if (session()->get('type') == 'Admin') {
    //         $orderItems = DB::table('order_items')
    //             ->join('products', 'order_items.productId', 'products.id')
    //             ->select('products.name as productName', 'products.picture', 'order_items.*')
    //             ->get();

    //         $orders = DB::table('users')
    //             ->join('orders', 'orders.customerId', 'users.id')
    //             ->select('orders.*', 'users.name as userName', 'users.email', 'users.status as userStatus')
    //             ->get();

    //         return view('Dashboard.orders', compact('orders', 'orderItems'));
    //     }
    //     return redirect()->back();
    // }



    public function changeOrderStatus($status, $id)
    {
        if (session()->get('type') == 'Admin') {
            $order = Order::find($id);
            $order->status = $status;
            $order->save();
            return redirect()->back()->with('success', 'Order Status Changed Successfully');
        }
        return redirect()->back();
    }
}