<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Auth;

class Attivita extends \App\Models\AbstractModels\AbstractAttivita
{
    public function logoUrl(): ?string
    {
        if (empty($this->path_logo)) {
            return null;
        }

        return str_starts_with($this->path_logo, 'http')
            ? $this->path_logo
            : asset($this->path_logo);
    }

    public function coverUrl(): ?string
    {
        if (empty($this->path_image)) {
            return null;
        }

        return str_starts_with($this->path_image, 'http')
            ? $this->path_image
            : asset($this->path_image);
    }

    public function iniziali(): string
    {
        $parts = preg_split('/\s+/', trim((string) $this->nome), -1, PREG_SPLIT_NO_EMPTY);

        if (empty($parts)) {
            return '?';
        }

        if (count($parts) === 1) {
            return mb_strtoupper(mb_substr($parts[0], 0, 2));
        }

        return mb_strtoupper(mb_substr($parts[0], 0, 1) . mb_substr($parts[1], 0, 1));
    }

    public static function E_Mia($attivita_id)
    {
        return self::where('id', $attivita_id)->where('user_id', Auth::user()->id)->exists();
    }

    public static function userCanAccess(?User $user, Attivita $attivita, ?Request $request = null): bool
        {
            if (!$user) return false;

            // Superadmin: accesso globale 
            if ($user->hasRole('superadmin')) {
                return true;
            }

            // Proprietario
            if ((int) $attivita->user_id === (int) $user->id) {
                return true;
            }

            // Cassa: dispositivo legato a questa attività (binding ok)
            $dispositivoId = session('dispositivo_id');
            if ($dispositivoId) {
                $pv = Dispositivo::find($dispositivoId);
                if ($pv && (int) $pv->attivita_id === (int) $attivita->id) {
                    return true; // oppure: + permesso view-punto_vendita
                }
            }

            // Futuro: staff dell'attività, permessi Spatie, ecc.
            // return $user->can('view-attivita') && ...

            return false;
        }
}
