<?php

namespace App\Models\Tenant;

use App\Models\Concerns\BelongsToTenant;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class ShopCustomer extends Authenticatable
{
    use BelongsToTenant, Notifiable, SoftDeletes;

    protected $fillable = [
        'company_id', 'client_id', 'name', 'phone', 'email', 'password', 'last_login_at',
    ];

    protected $hidden = ['password', 'remember_token'];

    protected $casts = [
        'last_login_at' => 'datetime',
        'password' => 'hashed',
    ];

    public function client(): BelongsTo
    {
        return $this->belongsTo(Client::class);
    }

    public function orders(): HasMany
    {
        return $this->hasMany(OnlineOrder::class);
    }

    /** Auth column for Laravel's session guard. */
    public function getAuthIdentifierName()
    {
        return 'id';
    }

    /** Send custom reset mail with a /shop/password/reset URL on the tenant subdomain. */
    public function sendPasswordResetNotification($token): void
    {
        $tenant = \App\Models\Central\Company::withoutGlobalScopes()->find($this->company_id);
        if (! $tenant || ! $this->email) return;

        $central = config('app.central_domain') ?: config('tenancy.central_domains.0', 'service.mir.md');
        $url = "https://{$tenant->slug}.{$central}/shop/password/reset/{$token}?email=" . urlencode($this->email);

        \Illuminate\Support\Facades\Mail::to($this->email)->send(
            new \App\Mail\ShopPasswordResetMail($this, $tenant, $url)
        );
    }
}
