<?php

namespace App\Models;

use App\Traits\HasSortsTrait;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Difusion extends Model
{
    use HasFactory, HasSortsTrait;

    protected $table = 'difusiones';
    protected $fillable = [
        'asunto',
        'slug',
        'enviar',
        'completado'
    ];

    protected $date = ['created_at', 'updated_at'];

    protected $cast = [
        'created_at' => 'datetime:d-m-Y H:m',
        'updated_at' => 'datetime:d-m-Y H:m',
    ];

    public function grupos()
    {
        return $this->belongsToMany(
            GrupoSuscriptor::class,
            'difusiones_grupos_suscriptores',
            'difusion_id',
            'grupo_suscriptor_id'
        );
    }


    public function suscriptores()
    {
        return $this->belongsToMany(
            ListasDifusion::class,
            'difusiones_listas_difusion',
            'difusion_id',
            'lista_difusion_id'
        )->withPivot('enviado', 'intento', 'cancelado');
    }

    public function setModulos($data)
    {
        $difusionId = $this->id;
        $registers = [];
        foreach ($data as $k => $item) {
            $moduloId = $item->modulo_id;
            $moduloType = $item->modulo_type;

            $difusionModulo = DifusionModulos::firstOrCreate([
                'difusion_id' => $difusionId,
                'modulo_id' => $moduloId,
                'modulo_type' => $moduloType,
            ]);
            $difusionModulo->orden = $k + 1;
            $difusionModulo->save();

            $registers[] = $difusionModulo->id;
        }
        DifusionModulos::where('difusion_id', $difusionId)
            ->whereNotIn('id', $registers)
            ->delete();
    }
}
