<?php

namespace App\Modules\Company\Reports;

use App\Http\Resources\Company\UserAction as UserActionResource;
use App\Traits\SearchTraits;
use App\Traits\SortingTraits;
use App\Traits\UserTraits;
use App\Models\UserAction;
use Illuminate\Support\Facades\DB;

class UserActions
{
    use SortingTraits, SearchTraits, UserTraits;

    public function getData($payload)
    {
        // sorting
        $sortField = $this->sortField($payload, 'created_at'); //default column to search
        $sortOrder = $this->sortOrder($payload, 'desc');

        // searching
        $nameSearch = $this->searchField($payload->first_name);

        $companyId = $this->getCurrentUser()->company_id;
        return UserActionResource::collection(
            UserAction::select(
                'user_actions.id',
                'user_actions.description',
                'user_actions.created_at',
                'workers.first_name',
                'workers.last_name')
                ->join('workers', 'workers.id', '=', 'user_actions.worker_id')
                ->join('company_users', 'company_users.worker_id', '=', 'user_actions.worker_id')
                ->where('company_users.company_id', $companyId)
                ->when(!empty($nameSearch), function ($query) use ($nameSearch) {
                    return $query->where(function ($query) use ($nameSearch) {
                        $query->where('workers.first_name', 'LIKE', $nameSearch . '%')
                            ->orWhere('workers.last_name', 'LIKE', $nameSearch . '%')
                            ->orWhere(DB::raw('CONCAT(workers.first_name, " ", workers.last_name)'), 'LIKE', $nameSearch . '%');
                    });
                })
                ->orderBy($sortField, $sortOrder)
                ->groupBy('user_actions.id')
                ->paginate(20)
        )->response()->setStatusCode(201);
    }
}
