<?php

namespace App\Models\Concerns;

use App\Models\Company;
use App\Models\Scopes\CompanyScope;

/**
 * Trait para modelos que se aíslan por empresa.
 *
 * Hace 3 cosas:
 *  1. Aplica el CompanyScope automáticamente (filtra queries)
 *  2. Asigna company_id en creación si no se especificó (toma la empresa actual)
 *  3. Define la relación belongsTo(Company)
 *
 * Uso:
 *   class Ticket extends Model
 *   {
 *       use BelongsToCompany;
 *       ...
 *   }
 */
trait BelongsToCompany
{
    public static function bootBelongsToCompany(): void
    {
        // Aplicar scope global de aislamiento
        static::addGlobalScope(new CompanyScope);

        // Auto-asignar company_id al crear si no se especificó
        static::creating(function ($model) {
            if (empty($model->company_id) && auth()->check()) {
                $user = auth()->user();

                // Si es operador con empresa seleccionada en sesión
                if ($user->isOperatorMember() && session()->has('current_company_id')) {
                    $model->company_id = session('current_company_id');
                }
                // Caso normal: empresa del usuario
                elseif ($user->company_id) {
                    $model->company_id = $user->company_id;
                }
            }
        });
    }

    public function company()
    {
        return $this->belongsTo(Company::class);
    }
}
