<?php

namespace App\Models;

use App\Models_v2\FindSession;
use App\User;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Lead extends Model {
	//
	use SoftDeletes;

	const ACTIVE = 0;
	const INACTIVE = 1;

	protected $fillable = [
		'name',
		'email',
		'phone',
		'address',
		'source',
		'note',
		'status',

		'province_id',
		'district_id',
		'ward_id',
		'source_link',
		'price_min',
		'price_max',
		'status',
		'last_update_status_at',
		'user_id',
		'hostel_type',
		'hostel_type_rent'
	];

	public static function boot() {
		parent::boot();

		static::updated( function ( $item ) {
			if ( $item->isDirty( 'status' ) ) {
				if ( $item->status == Lead::ACTIVE ) {
					$item->last_update_status_at = Carbon::now()->toDateTimeString();
					$item->save();
				}
			}
		} );

		static::deleted( function ( $item ) {
			FindSession::query()->where( 'lead_id', $item->id )->delete();
		} );

		static::saved( function ( $item ) {
			$leadId     = $item->id;
			$districtId = $item->district_id;

			$attrs = [
				'status'      => ( $item->status == self::ACTIVE ) ? FindSession::SEARCHING : FindSession::CANCEL,
				'min_price'   => empty( $item->price_min ) ? 0 : $item->price_min,
				'max_price'   => empty( $item->price_max ) ? 0 : $item->price_max,
				'type'        => $item->hostel_type,
				'type_rent'   => $item->hostel_type_rent,
				'note'        => $item->note,
				'province_id' => $item->province_id,
				'district_id' => [$districtId]
			];

			$attrs['properties'] = $attrs;
			$attrs['user_id']    = $item->user_id;

			FindSession::query()
			           ->updateOrCreate( [
				           'lead_id' => $leadId
			           ], $attrs );
		} );
	}


	protected $dates = [
		'created_at',
		'updated_at',
		'deleted_at',
		'last_update_status_at'
	];

	public function users() {
		return $this->belongsToMany( User::class, 'lead_users', 'lead_id', 'user_id' );
	}

	public function province() {
		return $this->belongsTo( Province::class, 'province_id', 'provinceid' );
	}

	public function district() {
		return $this->belongsTo( District::class, 'district_id', 'districtid' );
	}

	public function ward() {
		return $this->belongsTo( Ward::class, 'ward_id', 'wardid' );
	}
}
