<?php

namespace App\Traits;

use Illuminate\Support\Str;

use App\Utilities\Paginate;
use App\Utilities\SearchResult;

trait SearchTrait
{
    public function getClassNameAttribute()
    {
        return Str::kebab(class_basename($this));
    }

    public function getSearchLabelAttribute()
    {
        return $this->name;
    }

    public function getSearchFieldsAttribute()
    {
        return [
            'name',
        ];
    }

    public function search($terms = null, $collection = null)
    {
        $terms = SearchResult::collectTerms($terms);

        $results = $this->where(function ($query) use ($terms) {
            $first = true;
            foreach ($terms as $term) {
                foreach ($this->search_fields as $field) {
                    if ($first) {
                        $query->where($field, 'LIKE', '%'.$term.'%');
                        $first = false;
                    } else {
                        $query->orWhere($field, 'LIKE', '%'.$term.'%');
                    }
                }
            }
        })
        ->get();

        if ($collection) {
            return $results;
        }

        if (requestInput('paginate')) {
            return Paginate::create($results);
        }

        if (requestInput('autocomplete')) {
            return [
                'results' => $results->map(function ($result) {
                    $result = $result->append('search_label')->toArray();
                    //$result['selected'] = false;
                    return $result;
                })
            ];
        }

        return $results;
    }
}
