<?php

namespace App\Models;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable implements MustVerifyEmail {
	use Notifiable;

	/**
	 * The attributes that are mass assignable.
	 *
	 * @var array
	 */
	protected $fillable = [ 
			'name',
			'email',
			'password',
			'mobile'
	];

	/**
	 * The attributes that should be hidden for arrays.
	 *
	 * @var array
	 */
	protected $hidden = [ 
			'password',
			'remember_token'
	];

	/**
	 * The attributes that should be cast to native types.
	 *
	 * @var array
	 */
	protected $casts = [ 
			'email_verified_at' => 'datetime'
	];
	public function addresses() {
		return $this->hasMany ( UserAddress::class );
	}
	public function favoriteProducts() {
		return $this->belongsToMany ( Product::class, 'user_favorite_products' )->withTimestamps ()->orderBy ( 'user_favorite_products.created_at', 'desc' );
	}
	public function cartItems() {
		return $this->hasMany ( CartItem::class );
	}
}
