[Back]
<?php

namespace App\Http\Controllers;

use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Support\Facades\Response;
use League\Csv\Writer;
use SplTempFileObject;
use Barryvdh\DomPDF\Facade\Pdf;
use Request;
use Session;
use DB;
use Illuminate\Support\Facades\Hash;

class mycont extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
    
    
    function generateAllReport()
    {
        // Fetch input parameters using the static Request facade
        $type = Request::query('type');
        $format = Request::query('format');
    
        // Define mappings for table names, headers, and views
        $config = [
            'asset' => [
                'table' => 'Asset',
                'columns' => ['id', 'item', 'serial_no', 'assetTag', 'location', 'remarks', 'status'],
                'headers' => ['ID', 'Item', 'Serial No', 'Asset Tag', 'Location', 'Status', 'Remarks'],
                'view' => 'asset-report',
                'title' => 'Assets Report',
            ],
            'print-asset' => [
                'table' => 'PrintAsset',
                'columns' => ['id', 'type', 'location', 'dept', 'brand', 'model', 'assetTag', 'Serial_No', 'remarks', 'status'],
                'headers' => ['ID', 'Type', 'Location', 'Department', 'Brand', 'Model', 'Asset Tag', 'Serial No', 'Status', 'Remarks'],
                'view' => 'print-asset-report',
                'title' => 'Printer Assets Report',
            ],
            'comp-asset' => [
                'table' => 'CompAsset',
                'columns' => ['id', 'brand', 'model', 'assetTag', 'Serial_No', 'status', 'location', 'remarks'],
                'headers' => ['ID', 'Brand', 'Model', 'Asset Tag', 'Serial No', 'Status', 'Location', 'Remarks'],
                'view' => 'comp-asset-report',
                'title' => 'Computer Assets Report',
            ],
        ];
    
        // Validate the type
        if (!array_key_exists($type, $config)) {
            return redirect()->back()->with('error', 'Invalid report type selected.');
        }
    
        // Fetch data from the database
        $assets = DB::table($config[$type]['table'])
            ->select($config[$type]['columns'])
            ->orderBy('id')
            ->get();
    
        // Prepare data for the view
        $data = [
            'assets' => $assets,
            'title' => $config[$type]['title'],
        ];
    
        if ($format === 'pdf') {
            $pdf = Pdf::loadView($config[$type]['view'], $data);
            return $pdf->download(strtolower(str_replace(' ', '_', $config[$type]['title'])) . '_report.pdf');
        } elseif ($format === 'csv') {
            $csv = Writer::createFromString('');
            $csv->insertOne($config[$type]['headers']);
    
            foreach ($assets as $asset) {
                $row = [];
                foreach ($config[$type]['columns'] as $column) {
                    $row[] = $asset->$column ?? 'N/A';
                }
                $csv->insertOne($row);
            }
    
            $csvContent = $csv->getContent();
            return Response::make($csvContent, 200, [
                'Content-Type' => 'text/csv',
                'Content-Disposition' => 'attachment; filename="' . strtolower(str_replace(' ', '_', $config[$type]['title'])) . '_report.csv"',
            ]);
        }
    
        return redirect()->back()->with('error', 'Invalid format selected.');
    }
    
    
    
    function generateReport()
    {
        // Get search text and format from the request
        $searchText = Request::query('searchTxtHist');
        $format = Request::query('format');
    
        // Start query builder
        $query = DB::table('AssetHistory')
            ->join('user', 'AssetHistory.user_id', '=', 'user.id')
            ->select(
                'AssetHistory.*',
                'username as username',
                DB::raw("
                    CASE 
                        WHEN type = 'CompAsset' THEN 'Computer'
                        WHEN type = 'PrintAsset' THEN 'Printer'
                        WHEN type = 'Asset' THEN 'Other Asset'
                        ELSE 'Unknown'
                    END AS type_label
                ")
            )
            ->orderBy('created_at', 'desc');
    
        // Apply search filter
        if ($searchText) {
            $query->where(function ($q) use ($searchText) {
                $q->where('username', 'LIKE', '%' . $searchText . '%') // Search by username
                    ->orWhere('asset_id', 'LIKE', '%' . $searchText . '%') // Search by asset_id
                    ->orWhere('location', 'LIKE', '%' . $searchText . '%') // Search by location
                    ->orWhere('start_date', 'LIKE', '%' . $searchText . '%') // Search by start_date
                    ->orWhere('remarks', 'LIKE', '%' . $searchText . '%') // Search by remarks
                    ->orWhere(DB::raw("
                        CASE 
                            WHEN type = 'CompAsset' THEN 'Computer'
                            WHEN type = 'PrintAsset' THEN 'Printer'
                            WHEN type = 'Asset' THEN 'Other Asset'
                            ELSE 'Unknown'
                        END
                    "), 'LIKE', '%' . $searchText . '%'); // Search by translated type label
            });
        }
    
        // Retrieve results
        $history = $query->get();
    
        // Add type-specific details
        foreach ($history as $entry) {
            if ($entry->type === 'CompAsset' || $entry->type === 'PrintAsset') {
                $details = DB::table($entry->type)
                    ->select('model', 'brand')
                    ->where('id', $entry->asset_id)
                    ->first();
                $entry->details = $details ? "{$details->model} - {$details->brand}" : 'N/A';
            } elseif ($entry->type === 'Asset') {
                $details = DB::table('Asset')
                    ->select('item')
                    ->where('id', $entry->asset_id)
                    ->first();
                $entry->details = $details ? $details->item : 'N/A';
            }
        }
    
        // Prepare data for report
        $data = ['history' => $history];
    
        // Generate report based on format
        if ($format === 'csv') {
            // Create CSV
            $csv = Writer::createFromString('');
            $csv->insertOne([
                'Asset ID', 'Type', 'Details', 'User', 'Status',
                'Location', 'Start Date', 'End Date', 'Remarks', 'Created At', 'Updated At'
            ]);
    
            foreach ($history as $entry) {
                $csv->insertOne([
                    $entry->asset_id,
                    $entry->type_label,
                    $entry->details ?? 'N/A',
                    $entry->username,
                    $entry->status,
                    $entry->location,
                    $entry->start_date ?? 'N/A',
                    $entry->end_date ?? 'N/A',
                    $entry->remarks,
                    $entry->created_at,
                    $entry->updated_at
                ]);
            }
    
            return Response::make($csv->getContent(), 200, [
                'Content-Type' => 'text/csv',
                'Content-Disposition' => 'attachment; filename="asset_history_report.csv"'
            ]);
        } else {
            // Default to PDF
            $pdf = Pdf::loadView('asset-history-report', $data);
            return $pdf->download('asset_history_report.pdf');
        }
    }





    
    
    
    function requestAsset()
    {
        \Request::validate([
            'asset_id' => 'required|integer',
            'asset_type' => 'required|string|in:CompAsset,PrintAsset,Asset',
            'location' => 'required|string|max:255',
        ]);
    
        $assetId = \Request::get('asset_id');
        $assetType = \Request::get('asset_type');
        $location = \Request::get('location');
        $userId = Session::get('user_id');
    
        if (!$userId) {
            return back()->with('error', 'You must be logged in to request an asset.');
        }
    
        // Fetch user data and username
        $user = DB::table('user')->where('id', $userId)->first();
        if (!$user) {
            return back()->with('error', 'User not found.');
        }
        $username = $user->username; // Adjust to your actual column name for username
    
        $tableMap = [
            'CompAsset' => 'CompAsset',
            'PrintAsset' => 'PrintAsset',
            'Asset' => 'Asset',
        ];
    
        $table = $tableMap[$assetType] ?? null;
    
        if (!$table) {
            return back()->with('error', 'Invalid asset type.');
        }
    
        return DB::transaction(function () use ($table, $assetId, $userId, $username, $location, $assetType) {
            $asset = DB::table($table)->where('id', $assetId)->first();
    
            if (!$asset) {
                return back()->with('error', 'Asset not found.');
            }
    
            if (strtolower($asset->status) !== 'available') {
                return back()->with('error', 'Asset is not available.');
            }
    
            // Update asset status
            DB::table($table)->where('id', $assetId)->update([
                'status' => 'Pending',
            ]);
    
            // Insert into AssetHistory with proper remarks
            DB::table('AssetHistory')->insert([
                'asset_id' => $assetId,
                'type' => $assetType,
                'user_id' => $userId,
                'status' => 'Requested',
                'location' => $location,
                'start_date' => now(),
                'remarks' => 'Asset requested by ' . $username . '.', // Maintained this format
                'created_at' => now(),
                'updated_at' => now()
            ]);
    
            return back()->with('success', 'Asset request submitted successfully.');
        });
    }
    
    
    
    function manageRequest()
    {
        Request::validate([
            'asset_id' => 'required|integer',
            'asset_type' => 'required|string|in:CompAsset,PrintAsset,Asset',
            'action' => 'required|string|in:approve,reject',
        ]);
    
        $assetId = Request::input('asset_id');
        $assetType = Request::input('asset_type');
        $action = Request::input('action');
        $remarks = $action === 'approve' ? 'Approved by admin.' : 'Rejected by admin.';
        $status = $action === 'approve' ? 'Approved' : 'Rejected';
    
        $tableMap = [
            'CompAsset' => 'CompAsset',
            'PrintAsset' => 'PrintAsset',
            'Asset' => 'Asset',
        ];
    
        $table = $tableMap[$assetType] ?? null;
    
        if (!$table) {
            return back()->with('error', 'Invalid asset type.');
        }
    
        DB::transaction(function () use ($table, $assetId, $status, $remarks, $action) {
            // Fetch the requested asset history entry
            $assetHistory = DB::table('AssetHistory')
                ->where('asset_id', $assetId)
                ->where('status', 'Requested')
                ->first();
    
            if (!$assetHistory) {
                throw new Exception('No pending request found for this asset.');
            }
    
            // Update the AssetHistory table
            DB::table('AssetHistory')
                ->where('id', $assetHistory->id)
                ->update([
                    'status' => $action === 'approve' ? 'In Use' : 'Rejected',
                    'remarks' => $remarks,
                    'end_date' => $action === 'reject' ? now() : null, // Set end_date if rejected
                    'updated_at' => now(),
                ]);
    
            // If approved, update the asset table with the new location
            $updateData = ['status' => $action === 'approve' ? 'In Use' : 'Available'];
            if ($action === 'approve') {
                $updateData['location'] = $assetHistory->location; // Set location from AssetHistory
            }
    
            DB::table($table)->where('id', $assetId)->update($updateData);
        });
    
        return back()->with('success', "Request has been {$status}.");
    }
    
    
    function returnAsset()
    {
        Request::validate([
            'asset_id' => 'required|integer',
            'asset_type' => 'required|string|in:CompAsset,PrintAsset,Asset',
        ]);
    
        $assetId = Request::input('asset_id');
        $assetType = Request::input('asset_type');
        $end_date = Request::input('end_date');
        $userId = Session::get('user_id'); // Retrieve user_id from session
    
        // Fetch username
        $user = DB::table('user')->where('id', $userId)->first();
        if (!$user) {
            return back()->with('error', 'User not found.');
        }
        $username = $user->username; // Adjust column name as per your database
    
        $tableMap = [
            'CompAsset' => 'CompAsset',
            'PrintAsset' => 'PrintAsset',
            'Asset' => 'Asset',
        ];
    
        $table = $tableMap[$assetType] ?? null;
    
        if (!$table) {
            return back()->with('error', 'Invalid asset type.');
        }
    
        DB::transaction(function () use ($table, $assetId, $end_date, $username) {
            // Update the AssetHistory record
            DB::table('AssetHistory')->where('asset_id', $assetId)->where('status', 'In Use')->update([
                'status' => 'Approved',
                'end_date' => now(),
                'remarks' => 'Returned by ' . $username . '.', // Updated to include username
                'updated_at' => now(),
            ]);
    
            // Update the asset status back to Available and clear the location
            DB::table($table)->where('id', $assetId)->update([
                'status' => 'Available',
                'location' => '', // Clear the location
            ]);
        });
    
        return back()->with('success', 'Asset has been returned successfully.');
    }
    
    
    
    function viewHistory()
    {
        // Get the logged-in user ID and user level from session
        $userId = Session::get('user_id');
        $userLevel = Session::get('userlevel'); // Get user level from session
    
        if (!$userId) {
            return redirect()->route('login')->with('error', 'Please log in to view history.');
        }
    
        // Get the search text from the request
        $searchText = Request::query('searchTxtHist');
    
        // Start query builder
        $query = DB::table('AssetHistory')
            ->join('user', 'AssetHistory.user_id', '=', 'user.id')
            ->select(
                'AssetHistory.*',
                'user.username as username',
                DB::raw("
                    CASE 
                        WHEN AssetHistory.type = 'CompAsset' THEN 'Computer'
                        WHEN AssetHistory.type = 'PrintAsset' THEN 'Printer'
                        WHEN AssetHistory.type = 'Asset' THEN 'Other Asset'
                        ELSE 'Unknown'
                    END AS type_label
                ")
            )
            ->orderBy('AssetHistory.created_at', 'desc');
    
        // Apply condition: If user is not admin, filter by user_id
        if ($userLevel !== 'admin') {
            $query->where('AssetHistory.user_id', $userId);
        }
    
        // Apply search filter
        if ($searchText) {
            $query->where(function ($q) use ($searchText) {
                $q->where('user.username', 'LIKE', '%' . $searchText . '%')
                    ->orWhere('AssetHistory.asset_id', 'LIKE', '%' . $searchText . '%')
                    ->orWhere('AssetHistory.location', 'LIKE', '%' . $searchText . '%')
                    ->orWhere('AssetHistory.start_date', 'LIKE', '%' . $searchText . '%')
                    ->orWhere('AssetHistory.remarks', 'LIKE', '%' . $searchText . '%')
                    ->orWhere(DB::raw("
                        CASE 
                            WHEN AssetHistory.type = 'CompAsset' THEN 'Computer'
                            WHEN AssetHistory.type = 'PrintAsset' THEN 'Printer'
                            WHEN AssetHistory.type = 'Asset' THEN 'Other Asset'
                            ELSE 'Unknown'
                        END
                    "), 'LIKE', '%' . $searchText . '%');
            });
        }
    
        // Paginate results (10 items per page)
        $history = $query->paginate(10);
    
        // Add type-specific details
        foreach ($history as $entry) {
            if ($entry->type === 'CompAsset' || $entry->type === 'PrintAsset') {
                $details = DB::table($entry->type)
                    ->select('model', 'brand')
                    ->where('id', $entry->asset_id)
                    ->first();
                $entry->details = $details ? "{$details->model} - {$details->brand}" : 'N/A';
            } elseif ($entry->type === 'Asset') {
                $details = DB::table('Asset')
                    ->select('item')
                    ->where('id', $entry->asset_id)
                    ->first();
                $entry->details = $details ? $details->item : 'N/A';
            }
        }
    
        // Return view with results
        return view('history', compact('history'));
    }











    
    
    
    function ManageAsset(){
        
        
        //Add Asset
        if (Request::get("btnViewAddAsset")){
            return view("manageasset/formAddAsset");
        }else if(Request::get('btnAddAsset')){
            $item = Request::get('item');
            $assetTag = Request::get('assetTag');
            $serial_no = Request::get('serial_no');
            $Remarks = Request::get('Remarks');
            $status = Request::get('status');
            $location = Request::get('location');
            
            DB::table("Asset")
            ->insert([
                "item" => $item,
                 "assetTag" => $assetTag,
                 "Serial_No" => $Serial_No,
                 "Remarks" => $Remarks,
                 "status" => $status,
                 "location" => $location
                 
                ]);
            return redirect ('manageasset');
        }
        
        //delete Asset
        if (Request::get("btnViewDeleteAsset")){
            $id = Request::get("id");
            $data = DB::table("Asset")
                    ->where('id',$id)
                    ->first();
            return view("manageasset/formDeleteAsset",compact('data'));
        }else if(Request::get('btnDeleteAsset')){
            $id = Request::get('id');
            DB::table("Asset")
            ->where("id",$id)
            ->delete();
                return redirect ('manageasset');
        }
        
        
            //edit Asset
        if (Request::get("btnViewEditAsset")){
            $id = Request::get("id");
            $data = DB::table("Asset")
                    ->where('id',$id)
                    ->first();
            return view("manageasset/formEditAsset",compact('data'));
        }else if(Request::get('btnUpdateAsset')){
            $item = Request::get('item');
            $assetTag = Request::get('assetTag');
            $serial_no = Request::get('serial_no');
            $remarks = Request::get('remarks');
            $status = Request::get('status');
            $location = Request::get('location');
            $id = Request::get('id');
            DB::table("Asset")
            ->where("id",$id)
            ->update([
                "item" => $item,
                 "assetTag" => $assetTag,
                 "serial_no" => $serial_no,
                 "remarks" => $remarks,
                 "status" => $status,
                 "location" => $location
                 
                ]);
                return redirect ('manageasset');
        }
        
        
        
        
        //Add Print
        if (Request::get("btnViewAddPrint")){
            return view("manageasset/formAddAssetPrint");
        }else if(Request::get('btnAddPrint')){
            $type = Request::get('type');
            $location = Request::get('location');
            $dept = Request::get('dept');
            $brand = Request::get('brand');
            $model = Request::get('model');
            $assetTag = Request::get('assetTag');
            $Serial_No = Request::get('Serial_No');
            $Remarks = Request::get('Remarks');
            $status = Request::get('status');
            
            DB::table("PrintAsset")
            ->insert([
                "type" => $type,
                "location" => $location,
                "dept" => $dept,
                "brand" => $brand,
                 "model" => $model,
                 "assetTag" => $assetTag,
                 "Serial_No" => $Serial_No,
                 "Remarks" => $Remarks,
                 "status" => $status
                 
                ]);
            return redirect ('manageasset');
        }
        
        //delete Print
        if (Request::get("btnViewDeletePrint")){
            $id = Request::get("id");
            $data = DB::table("PrintAsset")
                    ->where('id',$id)
                    ->first();
            return view("manageasset/formDeleteAssetPrint",compact('data'));
        }else if(Request::get('btnDeletePrint')){
            $id = Request::get('id');
            DB::table("PrintAsset")
            ->where("id",$id)
            ->delete();
                return redirect ('manageasset');
        }
        
        
            //edit Print
        if (Request::get("btnViewEditPrint")){
            $id = Request::get("id");
            $data = DB::table("PrintAsset")
                    ->where('id',$id)
                    ->first();
            return view("manageasset/formEditAssetPrint",compact('data'));
        }else if(Request::get('btnUpdateAssetPrint')){
            $type = Request::get('type');
            $location = Request::get('location');
            $dept = Request::get('dept');
            $brand = Request::get('brand');
            $model = Request::get('model');
            $assetTag = Request::get('assetTag');
            $Serial_No = Request::get('Serial_No');
            $remarks = Request::get('remarks');
            $status = Request::get('status');
            $id = Request::get('id');
            DB::table("PrintAsset")
            ->where("id",$id)
            ->update([
                "type" => $type,
                "location" => $location,
                "dept" => $dept,
                "brand" => $brand,
                "model" => $model,
                "assetTag" => $assetTag,
                "Serial_No" => $Serial_No,
                "remarks" => $remarks,
                "status" => $status
                 
                ]);
                return redirect ('manageasset');
        }
        
        
        //Add Comp
        if (Request::get("btnViewAddComp")){
            return view("manageasset/formAddAssetComp");
        }else if(Request::get('btnAddComp')){
            $brand = Request::get('brand');
            $model = Request::get('model');
            $assetTag = Request::get('assetTag');
            $Serial_No = Request::get('Serial_No');
            $Remarks = Request::get('Remarks');
            $status = Request::get('status');
            $location = Request::get('location');
            
            DB::table("CompAsset")
            ->insert([
                "brand" => $brand,
                 "model" => $model,
                 "assetTag" => $assetTag,
                 "Serial_No" => $Serial_No,
                 "status" => $status,
                 "location" => $location,
                 "Remarks" => $Remarks
                 
                ]);
            return redirect ('manageasset');
        }
        
        
        
            //edit Comp
        if (Request::get("btnViewEditComp")){
            $id = Request::get("id");
            $data = DB::table("CompAsset")
                    ->where('id',$id)
                    ->first();
            return view("manageasset/formEditAssetComp",compact('data'));
        }else if(Request::get('btnUpdateAssetComp')){
            
            $brand = Request::get('brand');
            $model = Request::get('model');
            $assetTag = Request::get('assetTag');
            $Serial_No = Request::get('Serial_No');
            $Remarks = Request::get('Remarks');
            $location = Request::get('location');
            $status = Request::get('status');
            
            $id = Request::get('id');
            DB::table("CompAsset")
            ->where("id",$id)
            ->update([
                 "brand" => $brand,
                 "model" => $model,
                 "assetTag" => $assetTag,
                 "Serial_No" => $Serial_No,
                 "status" => $status,
                 "location" => $location,
                 "Remarks" => $Remarks
                 
                ]);
                return redirect ('manageasset');
        }
        
        
        //delete Comp
        if (Request::get("btnViewDeleteComp")){
            $id = Request::get("id");
            $data = DB::table("CompAsset")
                    ->where('id',$id)
                    ->first();
            return view("manageasset/formDeleteAssetComp",compact('data'));
        }else if(Request::get('btnDeleteComp')){
            $id = Request::get('id');
            DB::table("CompAsset")
            ->where("id",$id)
            ->delete();
                return redirect ('manageasset');
        }
        
            
            $CompAsset = DB::table("CompAsset")->get();
            $PrintAsset = DB::table("PrintAsset")->get();
            $Asset = DB::table("Asset")->get();
        
            $totalCompAsset = DB::table("CompAsset")->count();
            $totalPrintAsset = DB::table("PrintAsset")->count();
            $totalOtherAsset = DB::table("Asset")->count();
        
        
            $statusCounts = DB::table('CompAsset')
            ->select('Status', DB::raw('COUNT(*) as total'))
            ->groupBy('Status')
            ->pluck('total', 'Status'); // This will create an associative array like ['In Use' => 10, 'Under Maintenance' => 5]
    
            // Extract individual counts
            $inUseCount = $statusCounts->get('In Use', 0); // Default to 0 if the status is not present
            $underMaintenanceCount = $statusCounts->get('Under Maintenance', 0);
            $availableCount = $statusCounts->get('Available', 0);
            $retiredCount = $statusCounts->get('Retired', 0);
            $pendingCount = $statusCounts->get('Pending', 0);
            
            
            
            $statusCountsPrint = DB::table('PrintAsset')
            ->select('status', DB::raw('COUNT(*) as total'))
            ->groupBy('status')
            ->pluck('total', 'status'); // This will create an associative array like ['In Use' => 10, 'Under Maintenance' => 5]
    
            // Extract individual counts
            $inUseCountPrint = $statusCountsPrint->get('In Use', 0); // Default to 0 if the status is not present
            $underMaintenanceCountPrint = $statusCountsPrint->get('Under Maintenance', 0);
            $availableCountPrint = $statusCountsPrint->get('Available', 0);
            $retiredCountPrint = $statusCountsPrint->get('Retired', 0);
            $pendingCountPrint = $statusCountsPrint->get('Pending', 0);
            
            
            
            $statusCountsOther = DB::table('Asset')
            ->select('status', DB::raw('COUNT(*) as total'))
            ->groupBy('status')
            ->pluck('total', 'status'); // This will create an associative array like ['In Use' => 10, 'Under Maintenance' => 5]
    
            // Extract individual counts
            $inUseCountOther = $statusCountsOther->get('In Use', 0); // Default to 0 if the status is not present
            $underMaintenanceCountOther = $statusCountsOther->get('Under Maintenance', 0);
            $availableCountOther = $statusCountsOther->get('Available', 0);
            $retiredCountOther = $statusCountsOther->get('Retired', 0);
            $pendingCountOther = $statusCountsOther->get('Pending', 0);
            
            
        
        return view("manageassetview",compact('CompAsset','PrintAsset','Asset','totalCompAsset','totalPrintAsset','totalOtherAsset',
        'inUseCount','underMaintenanceCount','availableCount','retiredCount','pendingCount',
        'inUseCountPrint','underMaintenanceCountPrint','availableCountPrint','retiredCountPrint','pendingCountPrint',
        'inUseCountOther','underMaintenanceCountOther','availableCountOther','retiredCountOther','pendingCountOther'));
        
    }
    
    
    function ListAsset(){
        
        
        
        if (Request::get("btnSearchAst")){
            $CompAsset = DB::table("CompAsset")
            ->where("brand","LIKE","%".Request::get("searchTxtAst")."%")
            ->orwhere("status","LIKE","%".Request::get("searchTxtAst")."%")
            ->orwhere("model","LIKE","%".Request::get("searchTxtAst")."%")
            ->orwhere("assetTag","LIKE","%".Request::get("searchTxtAst")."%")
            ->get();
            
            $PrintAsset = DB::table("PrintAsset")
            ->where("brand","LIKE","%".Request::get("searchTxtAst")."%")
            ->orwhere("status","LIKE","%".Request::get("searchTxtAst")."%")
            ->orwhere("type","LIKE","%".Request::get("searchTxtAst")."%")
            ->orwhere("brand","LIKE","%".Request::get("searchTxtAst")."%")
            ->get();
            
            $Asset = DB::table("Asset")
            ->where("item","LIKE","%".Request::get("searchTxtAst")."%")
            ->orwhere("status","LIKE","%".Request::get("searchTxtAst")."%")
            ->orwhere("assetTag","LIKE","%".Request::get("searchTxtAst")."%")
            ->get();
            
        }else{
            
            
            $CompAsset = DB::table("CompAsset")->get();
            $PrintAsset = DB::table("PrintAsset")->get();
            $Asset = DB::table("Asset")->get();
        }
        
        
        
        
        
        return view("main",compact('CompAsset','PrintAsset','Asset'));
        
    }
    
    
    
    
    function ListUser(){
        
        
        
        if (Request::get("btnViewAdd")) {
            return view("manageuser/formAddUser");
        }
    
        // Add User
        else if (Request::get('btnAddUser')) {
            $fullname = Request::get('fullname');
            $username = Request::get('username');
            $password = Request::get('password');
            $status = Request::get('status');
            $level = Request::get('level');
    
            // Hash the password before saving
            $hashedPassword = Hash::make($password);
    
            DB::table("user")->insert([
                "username" => $username,
                "fullname" => $fullname,
                "password" => $hashedPassword, // Use hashed password
                "status" => $status,
                "userlevel" => $level
            ]);
            return redirect('listuser');
        }
        
        
        
        
        // View Edit User Form
        if (Request::get("btnViewEdit")) {
            $id = Request::get("id");
            $data = DB::table("user")
                ->where('id', $id)
                ->first();
            return view("manageuser/formEditUser", compact('data'));
        }
    
        // Update User
        else if (Request::get('btnUpdateUser')) {
            $fullname = Request::get('fullname');
            $username = Request::get('username');
            $password = Request::get('password');
            $level = Request::get('level');
            $status = Request::get('status');
            $id = Request::get('id');
    
            $updateData = [
                "username" => $username,
                "fullname" => $fullname,
                "status" => $status,
                "userlevel" => $level
            ];
    
            // Check if password is provided; hash only if entered
            if (!empty($password)) {
                $updateData['password'] = Hash::make($password);
            }
    
            DB::table("user")
                ->where("id", $id)
                ->update($updateData);
    
            return redirect('listuser');
        }
        
        
        //search user button
        if (Request::get("btnSearch")){
            $data = DB::table("user")
            ->where("fullname","LIKE","%".Request::get("searchTxt")."%")
            ->get();
        }else{
            $data = DB::table("user")->get();
        }
        
        
        $totalUsers = $data->count(); 
        
        
        $statusCounts = DB::table('user')
            ->select('status', DB::raw('COUNT(*) as total'))
            ->groupBy('status')
            ->pluck('total', 'status');
         
            
        $ActiveCount = $statusCounts->get('Active', 0); // Default to 0 if the status is not present
        $DeactiveCount = $statusCounts->get('Deactive', 0);
        
        
        return view ("viewuser", compact('data','totalUsers','ActiveCount','DeactiveCount'));
        

        
    }
    
    
    
    function Logout(){
        Session::forget("username");
        return redirect("/login");
    }
    
    
    function Login()
    {
        if (Request::get("btnLogin")) {
            // Get username and password from the request
            $usr = Request::get("username");
            $pwd = Request::get("password");
    
            // Retrieve user by username
            $user = DB::table('user')
                ->where('username', $usr)
                ->first(); // Only fetch user data by username
    
            // Check if user exists
            if ($user && Hash::check($pwd, $user->password)) { // Verify hashed password
                // Check if the user is deactivated
                if ($user->status === 'Deactive') {
                    echo "Your account is deactivated. Please contact the administrator.";
                    echo "<meta http-equiv='REFRESH' content='3;url=login'>";
                    return;
                }
    
                // Set session variables
                Session::put("username", $user->username);
                Session::put("fullname", $user->fullname);
                Session::put("userlevel", $user->userlevel);
                Session::put("user_id", $user->id); // Store user_id in session
    
                // Redirect to the main page after successful login
                return redirect("/main");
            } else {
                // If user not found or password doesn't match
                echo "Wrong username/password";
                echo "<meta http-equiv='REFRESH' content='3;url=login'>";
            }
        } else {
            // If no form submission detected, just show the login page
            echo "None";
        }
    }
}