<?php

namespace App\Repositories\Interfaces;


use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Collection;

/**
* Interface EloquentRepositoryInterface
* @package App\Repositories
*/
interface BaseRepositoryInterface{

    /**
    * @return Collection
    */
    public function all(): Collection;

    /**
    * @param array $attributes
    * @return Model
    */
    public function create(array $attributes): Model;

    /**
    * @param array $attributes
    *
    * @return Boolean
    */
    public function bulkInsert(array $attributes): bool;

    /**
    * @param int $id
    * @return Model
    */
    public function find(int $id): ?Model;

    /**
    * @param array $attributes
    * @return Model
    */
    public function update(array $attributes, $id): Model;

    /**
    * @param array $attributes
    * @param int $id
    *
    * @return Model
    */
    public function fill(array $attributes, int $id): Model;

    /**
    * @param $id
    *
    */
    public function delete($id);

    /**
    * @param string $column
    * @param string $value
    * @return Model
    */
    public function getByColumn(string $column, string $value): ?Model;

    /**
    * @param string $column
    * @param string $value
    * @return Collection
    */
    public function getMultipleValues(string $column, string $value): ?Collection;

    /**
    * @param string $column
    * @return Boolean
    */
    public function deleteByColumn(string $column, string $value): bool;

    /**
     * @param array $filters
     * @param string $tableName
     *
     * @return Collection
     */
    public function search(array $filters, string $tableName): Collection;
}
