<?php

class LeadController extends BaseController {

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

	public function index() {
		$user = User::find(Sentry::getUser()->id);

		$input = Input::all();
		if (!Input::has('projectId')) {
			$input['projectId']	 = '';
			$leads							 = Lead::inMyProjects()->orderBy('created_at', 'DESC')->paginate(25);
		}
		else {
			$leads = Lead::inMyProjects()->whereProjectId($input['projectId'])->orderBy('created_at', 'DESC')->paginate(25);
		}

		return View::make('lead.index')
										->with('user', $user)
										->with('input', $input)
										->with('leads', $leads)
										->with('months', $this->months);
	}

	//аякс запрос информации по определенной заявке
	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'					 => Sentry::getUser()->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)'),
								'agent_id'				 => $lead->agent_id ? $lead->agent_id : DB::raw('NULL'),
		));

		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->getDataArray()) {
			$needPartnerSave = false;
			foreach ($lead->getDataArray() as $key => $value) {
				if ($key == 'примечание') {
					$partner->comment	 = $value;
					$needPartnerSave	 = true;
				}
			}
			if ($needPartnerSave) {
				$partner->save();
			}
		}

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

		return Response::json($response);
	}

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

		if (!Sentry::check() || !Sentry::getUser()->hasAnyAccess(array('admin', 'moderator'))) {
			$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);
	}

}
