<?php

namespace App\DataTables;

use App\Models\Impostazioni;
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 ImpostazioniDataTableEditor extends DataTablesEditor
{
  protected $model = Impostazioni::class;
  // protected $uploadDir = '';
  // protected $disk = 'modelliRicevute';

  protected $messages = [
    'valore.required' => 'Il valore è richiesto',
    'valore.formato' => 'Il valore non rispetta il formato del tipo di dato',
    'valore.date_format' => 'Il valore non rispetta il formato della data HH:mm',
    'valore.time_format' => 'Il valore non rispetta il formato dell\'ora HH:mm',
    'valore.email' => 'Il valore non è una email valida',
    'valore.boolean' => 'Il valore non è valido: scrivi true o false',
    'valore.numeric' => 'Il valore non è un numero valido',
    'valore.date' => 'Il valore non è una data valida (YYYY-MM-DD)',
    'valore.time' => 'Il valore non è un\'ora valida (HH:mm)',
    'valore.integer' => 'Il valore non è un intero valido',
    'valore.float' => 'Il valore non è un float valido',
    'valore.array' => 'Il valore non è un array valido.',
    'valore.min' => 'Numeri della settimana da 1 a 7',
    'valore.max' => 'Numeri della settimana da 1 a 7',
  ];

  /**
  * Get create action validation rules.
  *
  * @return array
  */
  public function createRules(): array
  {
    return [
      'valore'  => 'required',
      'valore.formato' => 'required',
    ];
  }

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

  /**
  * Get edit action validation rules.
  *
  * @param Model $model
  * @return array
  */
  public function editRules(Model $model): array
  {
    $rules = [
      'valore' => ['required'],
    ];

    switch ($model->tipo ?? null) {
      case 'integer':
        $rules['valore'][] = 'numeric';
        break;
      case 'boolean':
        $rules['valore'][] = 'in:0,1,true,false';
        break;
      case 'date':
        $rules['valore'][] = 'date';
        break;
      case 'email':
        $rules['valore'][] = 'email';
        break;
      case 'time':
        $rules['valore'][] = 'date_format:H:i';
        break;
      case 'float':
        $rules['valore'][] = 'numeric';
        break;
      case 'array':
        // $rules['valore'][] = 'array';
        // $rules['valore'][] = 'min:1';
        // $rules['valore'][] = 'max:7';
        $rules['valore'][] = 'regex:/^[1-7,]+$/';
        break;
      // Aggiungi altri casi per altri tipi personalizzati se necessario
      default:
        // per 'text', 'textarea', ecc., solo required
        break;
    }

    return $rules;
  }

  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
  {
    // $model->roles()->sync([$data['ruolo_id']]);
    return $data;
  }

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

}
