<?php

namespace App\DataTables;

use App\Models\EventoForm;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Validation\Rule;
use Yajra\DataTables\DataTablesEditor;
use Illuminate\Http\Request;
use Illuminate\Validation\ValidationException;
use Storage;
use Illuminate\Support\Str;

class EventoFormDataTableEditor extends DataTablesEditor
{
  protected $model = EventoForm::class;
  // protected $uploadDir = '';
  // protected $disk = 'modelliRicevute';

  protected $messages = [
    'label.required' => 'Il label è richiesto',
    'descrizione.required' => 'La descrizione è richiesta',
    'tipo.required' => 'Il tipo è richiesto',
    'costo.required' => 'Il costo è richiesto',
    'posti_disponibili.required' => 'Il numero di posti disponibili è richiesto',
    'nascondi_se_auth.required' => 'Il nascondi se autenticato è richiesto',
    'opzioni.required' => 'Le opzioni sono richieste',
    'remote_id.required' => 'Il remote id è richiesto',
    'posti_definiti_opzioni.required' => 'Il posti definiti opzioni è richiesto',
  ];

  /**
  * Get create action validation rules.
  *
  * @return array
  */
  public function createRules(): array
  {
    return [
      'label'  => 'required',
      'descrizione' => 'nullable',
      'tipo' => 'required',
      'costo' => 'nullable|numeric|min:0',
      'posti_disponibili' => 'nullable|numeric|min:0',
      'nascondi_se_auth' => 'nullable|boolean',
      'opzioni' => 'nullable',
      'remote_id' => 'nullable|numeric|min:0',
      'posti_definiti_opzioni' => 'nullable|boolean',
      'ordine_visualizzazione' => 'nullable|numeric|min:0',
    ];
  }

  public function createMessages(): array{
    return $this->messages;
  }

  /**
  * Get edit action validation rules.
  *
  * @param Model $model
  * @return array
  */
  public function editRules(Model $model): array
  {
    return [
      'label'  => 'required',
      'descrizione' => 'nullable',
      'tipo' => 'required',
      'costo' => 'nullable|numeric|min:0',
      'posti_disponibili' => 'nullable|numeric|min:0',
      'nascondi_se_auth' => 'nullable|boolean',
      'opzioni' => 'nullable',
      'remote_id' => 'nullable|numeric|min:0',
      'posti_definiti_opzioni' => 'nullable|boolean',
      'ordine_visualizzazione' => 'nullable|numeric|min:0',
    ];
  }

  public function editMessages(): array{
    return $this->messages;
  }

  /**
  * Get remove action validation rules.
  *
  * @param Model $model
  * @return array
  */
  public function removeRules(Model $model): array
  {
    return [];
  }

  public function creating(Model $model, array $data): array
  {
    $eventoId = request()->query('evento_id') ?? request()->input('evento_id');
    if ($eventoId) {
      $data['evento_id'] = (int) $eventoId;
    }

    return $data;
  }

  public function updating(Model $model, array $data): array
  {
    // dd($data['ruolo']);
    // $model->roles()->sync([$data['ruolo_id']]);
    return $data;
  }
  public function messages(): array
  {
    return $this->messages;
  }

}
