<?php

class LeadController extends BaseController {

	/**
	 * Constructor
	 */
	public function __construct() {
		// Establish Filters
		$this->beforeFilter('auth');
		$this->beforeFilter('hasRole:' . Role::ROLE_LEADS);

		parent::__construct();
	}

	public function index() {
		$input			 = Input::all();
		$leadsCount	 = 0;
		if (!$this->workProject) {
			$input['projectId']	 = '';
			$leads							 = Lead::inMyProjects()->with('project')->orderBy('created_at', 'DESC')->orderBy('id', 'ASC')->paginate(25);
			$leadsCount					 = Lead::inMyProjects()->with('project')->orderBy('created_at', 'DESC')->orderBy('id', 'ASC')->count();
		}
		else {
			$leads			 = Lead::inMyProjects()->whereProjectId($this->workProject->id)->with('project')->orderBy('created_at', 'DESC')->orderBy('id', 'ASC')->paginate(25);
			$leadsCount	 = Lead::inMyProjects()->whereProjectId($this->workProject->id)->with('project')->orderBy('created_at', 'DESC')->orderBy('id', 'ASC')->count();
		}

//		$myClient = Partner::my(array('statusType' => 'work'))->checkStatus(array('statusType' => 'work'))->whereRaw(DB::raw('salenextdatetime < NOW()'))->orderBy('salenextdatetime', 'ASC')->first();
//		if ($myClient && $leadsCount < 5 && !$user->hasAccess('admin')) {
//			Session::flash('info', trans('crm.needwork'));
//			return Redirect::to('partner/' . $myClient->id);
//		}
//		$otherClient = Partner::where('user_id', '!=', $user->id)->whereRaw('project_id IN (SELECT users_projects.project_id FROM users_projects INNER JOIN projects ON projects.id=users_projects.project_id AND projects.usecrm=1 WHERE users_projects.user_id=' . Auth::user()->id . ')')->checkStatus(array('statusType' => 'work'))->whereRaw(DB::raw('salenextdatetime < NOW()'))->orderBy('salenextdatetime', 'ASC')->first();
//		if ($otherClient) {
//			$otherClient->user()->associate($user);
//			$otherClient->save();
//
//			$otherClient->saveHistory("Клиент перешел к другому менеджеру: {$user->first_name} {$user->last_name}");
//
//			Session::flash('info', trans('crm.needwork_other'));
//			return Redirect::to('partner/' . $otherClient->id);
//		}

		return $this->setupLayout('lead.index')
										->with('input', $input)
										->with('leads', $leads);
	}

	//аякс запрос информации по определенной заявке
	public function getLead($id) {
		$lead = Lead::find($id);
		if ($lead == null || !is_numeric($id)) {
			$response = array(
					'status' => 'fail'
			);
		}
		else {
			$response = array(
					'status' => 'success',
					'lead'	 => $lead->toArray()
			);
		}

		return Response::json($response);
	}

	//аякс перенос заявки в CRM
	public function sendToCRM() {
		$input = Input::all();
		$id		 = $input['lead_id'];

		$lead = Lead::find($id);
		if ($lead == null || !is_numeric($id)) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$partner = Partner::create(array(
								'lead_id'					 => e($lead->id),
								'lead_created_at'	 => $lead->created_at,
								'project_id'			 => e($lead->project_id),
								'user_id'					 => $this->user->id,
								'status'					 => Partner::STATUS_WORK,
								'name'						 => e($lead->name),
								'phone'						 => e($this->preparePhone($lead->phone)),
								'email'						 => e($lead->email),
								'salenextdatetime' => DB::raw('DATE_ADD(NOW(), INTERVAL 30 MINUTE)'),
		));

		if ($partner == null) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$leaddate		 = explode(' ', $lead->created_at);
		$leaddate[0] = explode('-', $leaddate[0]);
		$date				 = "{$leaddate[0][2]} {$this->months[$leaddate[0][1]]}";
		$leaddate[1] = explode(':', $leaddate[1]);
		$time				 = "{$leaddate[1][0]}:{$leaddate[1][1]}";
		$partner->saveHistory("Добавлен в клиенты из заявок. Заявка от {$date}, {$time}");

		if ($lead->project->type == Project::TYPE_HR) {
			if ($lead->getDataArray()) {
				$needPartnerSave = false;
				foreach ($lead->getDataArray() as $key => $value) {
					if ($key == 'город') {
						$partner->city	 = $value;
						$needPartnerSave = true;
					}
					if ($key == 'скайп') {
						$partner->hr_skype = $value;
						$needPartnerSave	 = true;
					}
				}
				if ($needPartnerSave) {
					$partner->save();
				}
			}
		}
		elseif ($lead->project->type == Project::TYPE_SHOP) {
			if ($lead->getDataArray()) {
				$needPartnerSave = false;
				foreach ($lead->getDataArray() as $key => $value) {
					if ($key == 'город') {
						$partner->city	 = $value;
						$needPartnerSave = true;
					}
					if ($key == 'скайп') {
						$partner->comment	 = "Скайп: {$value}";
						$needPartnerSave	 = true;
					}
				}
				if ($needPartnerSave) {
					$partner->save();
				}
			}
		}

		if (in_array($partner->project->id, array(20)) && $partner->phone) {
			$url	 = GoogleURL::short("http://legaton.com/?utm_source=newlead");
			$smsc	 = new SMSCService();
			$smsc->sendSMS($partner->phone, "Ваша заявка принята в обработку. Интернет-магазин legaton.com {$url}");
		}

		$response = array(
				'status'		 => 'success',
				'partnerId'	 => $partner->id,
				'lead'			 => $lead->toArray()
		);
		$lead->user_id = $this->user->id;
		$lead->save();
		$lead->delete();

		return Response::json($response);
	}

	//аякс удаление заявки
	public function delete() {
		$input = Input::all();
		$id		 = $input['lead_id'];

		if (!Auth::check() || !Auth::user()->isAdmin()) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$lead = Lead::find($id);
		if ($lead == null || !is_numeric($id) || Session::token() !== Input::get('_token')) {
			$response = array(
					'status' => 'fail'
			);
			return Response::json($response);
		}

		$validator = Validator::make($input, array(
								'lead_info' => 'required'
		));

		if ($validator->fails()) {
			$messages = $validator->messages();
			if ($messages->has('lead_info')) {
				$message		 = 'Необходимо указать причину удаления';
				$error_field = 'lead_info';
			}
			$response = array(
					'status'				 => 'fail',
					'error_message'	 => $message,
					'error_field'		 => $error_field
			);
			return Response::json($response);
		}

		$response		 = array(
				'status' => 'success',
				'lead'	 => $lead->toArray()
		);
		$lead->data	 = json_encode($input['lead_info']);
		$lead->isbad = 1;
		$lead->save();
		$lead->delete();

		return Response::json($response);
	}

}
