<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Patient extends CI_Controller {

function __construct() 
{
    parent::__construct();
    $this->load->model('Patient_model');
    $this->load->model('Home_model');
    $this->load->model('Doctor_model');
    $this->load->model('Search_doctor_model');    
}

/*CONTROLLER PATIENT DASHBOARD */
public function index()
{
	if($this->session->userdata('UserData')&&$this->session->userdata('UserData')['type']=="PATIENT")
 {
 	$userdata = $this->session->userdata('UserData');
 	
 		$template['page'] = "patient_dash";
		$template['page_title'] = "Dashboard";
		$template['data'] = "Patient page";
		
		$patient_data = $this->Patient_model->get_single_patient($userdata['id']);
	
		//$patient_data['pt_complement'] = decrypt_data($patient_data['pt_complement']);
		  // print_r($patient_data['pt_complement']);die();
		$completed_consultation = $this->Patient_model->get_patient_completed_consultation($userdata['id']);


		$confirmed_consultation = $this->Patient_model->get_patient_confirmed_consultation($userdata['id']);
		//echo $this->db->last_query();exit();
		 //get all confirmed and waiting list bookings
		/*$canceled_consultation = $this->Patient_model->get_patient_canceled_consultation($userdata['id']); //get all canceled bookings*/

		$policy = $this->Patient_model->get_policy();
		$promocodes = $this->Patient_model->get_all_promocodes();
		//print_r($promocodes);die();

		//print_r($completed_consultation);
		//$clinic_list = $this->Doctor_model->get_doctor_clinic_list($userdata['id']);
		//$template['clinic_list'] = $clinic_list;
		//print_r($patient_data);

		$recent  = $this->Home_model->get_recent_chat($userdata['id'],$userdata['type']);

		//FETCHING NOTIFICATION FOR DASHBOARD VIEW
		$notifications = $this->Patient_model->get_notifications($userdata['id'],1,10);
		$this->session->set_userdata('notifications',$notifications);

		
		$template['recent'] = $recent;
		$template['patient_data'] = $patient_data;
		$template['policy'] = $policy;
		$template['completed_consultation'] = $completed_consultation;
		$template['confirmed_consultation'] = $confirmed_consultation;
		$template['promocodes'] = $promocodes;
		$template['notifications'] = $notifications;
		/*$template['canceled_consultation'] = $canceled_consultation;*/
		$this->load->view('template/template', $template);
 	
 }
 else
 {
 	$this->session->set_flashdata('message', array('message' => load_language('session_invalid_error',true), 'title' => 'Error', 'class' => 'danger'));
 	header('Location: '.base_url());
 }
}

/*FUNCTION FOR LOADING CANCELED BOOKINGS IN PATIENT DASHBOARD*/
public  function load_canceled_booking()
{
	$userdata = $this->session->userdata('UserData');
  	$canceled_consultation = $this->Patient_model->get_patient_canceled_consultation($userdata['id']); //get all canceled bookings
	$template['canceled_consultation'] = $canceled_consultation;
	$this->load->view('patient_dash_canceled_booking',$template);
}

/*FUNCTION FOR RETURNING BOOKING DATA FOR GIVEN BOOKING ID*/
public  function getBooking()
{
  $result = $this->Patient_model->get_Booking($_POST['booking_id']);

  $result['book_date'] = date('d F Y',$result['book_date']);
  $result['doc_pic'] = ''. base_url().$result['doc_pic'].'';
  //print_r($result['doc_pic']);die();
  print json_encode($result);
}

public function dsfsd(){
	$this->Webservice->cancel_booking_resend_cron();
}

/*FUNCTION FOR CANCELING BOOKING - PATIENT DASHBOARD*/
public  function cancelBooking()
{
	//print_r($_POST);die();
	$userdata = $this->session->userdata('UserData');
  	$result = $this->Patient_model->cancel_Booking($_POST['booking_id']);
  	$nowin_server = date("Y-m-d TH:i:s");
  	/*CODE FOR WALLET INSERTION*/
  	/*---------------------------------------------------*/
  	$booking_details = $this->Doctor_model->get_booking_details($_POST['booking_id']);
  	if($booking_details['visit_type']==0 && ($booking_details['payment_type'] == '2'))
  	{
  		$wallet = $this->Doctor_model->get_wallet_for_doctor($booking_details['doc_id']);
  		//print_r($wallet);exit();
  		$earn = $booking_details['book_price'] - (($booking_details['book_price'] * $booking_details['ipok_fee'])/100);
  		$wallet['future_earn'] = $wallet['future_earn'] - $earn;
  		$wallet['total_earn'] = $wallet['total_earn'] - $earn;
  		$this->Doctor_model->update_wallet($booking_details['doc_id'],$wallet);
  	}
  	/*---------------------------------------------------*/

  	/*CODE FOR SENTING NOTIFICATION  - PATIENT NOTIFICATION*/
	/*------------------------------------------------*/
	$doctor_data = $this->Doctor_model->get_single_doctor($booking_details['doc_id']);
	$text_pat = 'Your appointment scheduled in the system, on '.date('d.m.Y',$booking_details['time_start']).' at '.date('H:i a',$booking_details['time_start']).', doctor '.$doctor_data['dr_name'] .' is Canceled!';

	$notification_pat = array('patient_id' => $booking_details['pat_id'],'type'=>3,'message'=>$text_pat,'read_status'=>0,'time'=>strtotime($nowin_server),'booking_id' => $_POST['booking_id']);
	$patient_insert_id = $this->Home_model->insert_notification_patient($notification_pat);

	$fcm_user = $this->Home_model->get_patient_fcm($booking_details['pat_id']);
	//print_r($fcm_user);
	if(!empty($fcm_user['fcm_token']))
	{
		//print_r($fcm_user['fcm_token']);die();
		$pat_push_obj['id'] = $patient_insert_id;
		$pat_push_obj['type'] = "Consultation Canceled";
		$pat_push_obj['booking_id'] = $booking_details['book_id'];
		$pat_push_obj['booking_date'] = $booking_details['book_date'];
		$pat_push_obj['doctor_id'] = $booking_details['doc_id'];
		$pat_push_obj['doctor_name'] = $doctor_data['dr_name'];
		$pat_push_obj['doctor_specialization'] = $doctor_data['dr_specialization'];
		$pat_push_obj['message'] = $text_pat;
		$pat_push_obj['time'] = strtotime($nowin_server);
		$pat_push_obj['to'] = $fcm_user['fcm_token'];
		$user_type = '1'; //patient push
		$push_status = push_sent($pat_push_obj,$user_type);
	}
	/*------------------------------------------------*/

  	$check_waiting_list = $this->Patient_model->check_waiting_list($result);
  //	print_r($check_waiting_list); echo "<br>";
  	//check any user Exist in waiting List on that date if true ;
  	if($check_waiting_list['count']>0)
  	{
  		//echo "yes"; exit();
  		$this->Patient_model->change_waitinglist_to_confirmed($check_waiting_list['booking_id']);
  		$booking_details_waiting = $this->Doctor_model->get_booking_details($check_waiting_list['booking_id']);

  		/*CODE FOR SENTING WAITING LIST NOTIFICATION  - PATIENT NOTIFICATION*/
		/*------------------------------------------------*/
		$doctor_data_waiting = $this->Doctor_model->get_single_doctor($booking_details_waiting['doc_id']);
		$patient_data_waiting = $this->Patient_model->get_single_patient($booking_details_waiting['pat_id']);
		$text_pat_waiting = 'Your appointment scheduled in the system, on '.date('d.m.Y',$booking_details_waiting['time_start']).' at '.date('H:i a',$booking_details_waiting['time_start']).', doctor '.$doctor_data_waiting['dr_name'] .' is Confirmed!';

		$notification_pat_waiting = array('patient_id' => $booking_details_waiting['pat_id'],'type'=>0,'message'=>$text_pat_waiting,'read_status'=>0,'time'=>strtotime($nowin_server),'booking_id' => $check_waiting_list['booking_id']);

		$patient_insert_id = $this->Home_model->insert_notification_patient($notification_pat_waiting);

		$fcm_user = $this->Home_model->get_patient_fcm($booking_details_waiting['pat_id']);
		//print_r($fcm_user);
		if(!empty($fcm_user['fcm_token']))
		{
			//print_r($fcm_user['fcm_token']);die();
			$pat_push_obj['id'] = $patient_insert_id;
			$pat_push_obj['type'] = "Consultation Confirmation";
			$pat_push_obj['booking_id'] = $check_waiting_list['booking_id'];
			$pat_push_obj['booking_date'] = $booking_details_waiting['book_date'];
			$pat_push_obj['doctor_id'] = $booking_details_waiting['doc_id'];
			$pat_push_obj['doctor_name'] = $doctor_data_waiting['dr_name'];
			$pat_push_obj['doctor_specialization'] = $doctor_data_waiting['dr_specialization'];
			$pat_push_obj['message'] = $text_pat_waiting;
			$pat_push_obj['time'] = strtotime($nowin_server);
			$pat_push_obj['to'] = $fcm_user['fcm_token'];
			$user_type = '1'; //patient push
			$push_status = push_sent($pat_push_obj,$user_type);
		}
		/*------------------------------------------------*/

		/*CODE FOR  SENTING WAITING LIST NOTIFICATION - DOCTOR NOTIFICATION*/
		  	/*------------------------------------------------*/
			$text = 'A new appointment was scheduled in the system, on '.date('d.m.Y',$booking_details_waiting['time_start']).' at '.date('H:i a',$booking_details_waiting['time_start']).', patient '.decrypt_data($patient_data_waiting['pt_name']);

			$notification = array('doctor_id' => $booking_details_waiting['doc_id'],'type'=>2,'message'=>$text,'read_status'=>0,'time'=>strtotime($nowin_server) );

			$doctor_insert_id = $this->Home_model->insert_notification_doctor($notification);

			$fcm_doctor = $this->Home_model->get_doctor_fcm($booking_details_waiting['doc_id']);
			if(!empty($fcm_doctor['fcm_token']))
			{
				$doc_push_obj['id'] = $doctor_insert_id;
				$doc_push_obj['type'] = "New Consultation";
				$doc_push_obj['message'] =$text;
				$doc_push_obj['read_status'] = false;
				$doc_push_obj['to'] = $fcm_doctor['fcm_token'];
				$user_type = '2';
				$push_status = push_sent($doc_push_obj,$user_type);
			}
			/*------------------------------------------------*/

  	}//if no user exist in waiting list on that particular date. check on next date.
  	else{
  		//echo "no";exit();
  		$nextday = $booking_details['book_date'];
		$next_day_consult = $this->wait_list_data($booking_details,$nextday,'');
  		//$nextday = strtotime(date('Y-m-d', strtotime('+1 day', $booking_details['book_date'])));

		//$next_day_consult = $this->db->get_where('tbl_booking',array('doctor_id'=>$booking_details['doc_id'],'clinic_id'=>$booking_details['clinic_id'],'date'=>$nextday,'booking_status'=>'0','time'=>$booking_details['book_time'],'payment_status'=>'1'))->row_array();
		$doctor_data_waiting = $this->Doctor_model->get_single_doctor($next_day_consult[0]['doctor_id']);
  		$fcm_user = $this->Home_model->get_patient_fcm($next_day_consult[0]['patient_id']);

		if(count($next_day_consult) > 0){

			$text = "Your Wait Listed Appointment on ".date('d.m.Y h:i a',$next_day_consult[0]['time_start'])." can be changed to ".date('d.m.Y h:i a',$result['time_start'])." as the Time Slot is Available Now. Would you like to change the Appointment on Available Slot ?";

			$this->db->insert('tbl_patient_notification',array('patient_id'=>$next_day_consult[0]['patient_id'],'type'=>'4','message'=>$text,'time'=>strtotime($nowin_server),'booking_id'=>$next_day_consult[0]['id'],'free_booking_id'=>$_POST['booking_id'],'read_status'=>'0'));
			
			$new_patient_insert_id = $this->db->insert_id();
			$fcm_user = $this->Home_model->get_patient_fcm($next_day_consult[0]['patient_id']);
			$new['id'] = $new_patient_insert_id;
			$new['type'] = "Consultation Updates";
			$new['booking_id'] = $next_day_consult[0]['id'];
			$new['booking_date'] = $booking_details['book_date'];
			$new['doctor_id'] = $booking_details['doc_id'];
			$new['doctor_name'] = $doctor_data_waiting['dr_name'];
			$new['doctor_specialization'] = $doctor_data_waiting['dr_specialization'];
			$new['message'] = $text;
			$new['time'] = strtotime($nowin_server);
			$new['to'] =$fcm_user['fcm_token'];
			$user_type = '1';
			$push_status =push_sent($new,$user_type);

			$this->db->insert('tbl_waiting_list_id_crone',array('booking_id'=>$next_day_consult[0]['id'],'push_time'=> date('Y-m-d h:i:s'),'book_time'=>$booking_details['book_time'],'free_booking_id'=>$_POST['booking_id'],'book_date'=>$booking_details['book_date']));
		}
  	}
  	$confirmed_consultation = $this->Patient_model->get_patient_confirmed_consultation($userdata['id']);
	$template['confirmed_consultation'] = $confirmed_consultation;
	$this->load->view('patient_dash_scheduled_booking',$template);
}

	public function wait_list_data($query,$nextday,$insertid){
		$this->db->order_by('id','ASC');
		if(isset($insertid) && !empty($insertid)){
			$this->db->where_not_in('id', $insertid);
		}
		$next_day_consult = $this->db->get_where('tbl_booking',array('doctor_id'=>$query['doc_id'],'clinic_id'=>$query['clinic_id'],'booking_status'=>'0','date'=>$nextday,'payment_status'=>'1'))->result_array();
		//echo $this->db->last_query();exit();
		if(count($next_day_consult) > 0){
			return $next_day_consult;
		}else{
			if(isset($insertid) && !empty($insertid)){
				$insert_id = $insertid;
			}else{
				$insert_id = '';
			}
			$nextday = strtotime(date('Y-m-d', strtotime('+1 day', $nextday)));
			return $this->wait_list_data($query,$nextday,$insert_id);
		}
	}


/*FUNCTION FOR CHECKING CANCELLATION POLICY - PATIENT DASHBOARD*/
public  function check_cancelBooking()
{
	//print_r($_POST);die();
	$userdata = $this->session->userdata('UserData');
	$result = $this->Patient_model->get_Booking($_POST['booking_id']);
	$policy = $this->Patient_model->get_all_policy();
	
	$nowin_server = date("Y-m-d TH:i:s");
	if($_POST['UTCoffset']['sign']=='+')
		{
			$nowin_server_addoffset = date('Y-m-d H:i:s',strtotime('+'.$_POST['UTCoffset']['hour'].' hour +'.$_POST['UTCoffset']['minute'].' minutes',strtotime($nowin_server)));
		}
		elseif ($_POST['UTCoffset']['sign']=='-') 
		{
			$nowin_server_addoffset = date('Y-m-d H:i:s',strtotime('-'.$_POST['UTCoffset']['hour'].' hour -'.$_POST['UTCoffset']['minute'].' minutes',strtotime($nowin_server)));
		}

	$day = date('Y-m-d H:i:s',$result['time_start']);
	$newdate = date("Y-m-d H:i:s",strtotime($day." -".$policy['duration']." hours"));

	if(strtotime($nowin_server_addoffset)<strtotime($newdate))
	{
		$res = array('status' => 'success', 'msg'=>'booking can canceled');
	}
	else
	{
		$res = array('status' => 'error', 'msg'=>'booking cannot be canceled');
	}

	print json_encode($res);
  	/*$result = $this->Patient_model->cancel_Booking($_POST['booking_id']);
  	$confirmed_consultation = $this->Patient_model->get_patient_confirmed_consultation($userdata['id']);
	$template['confirmed_consultation'] = $confirmed_consultation;
	$this->load->view('patient_dash_scheduled_booking',$template);*/
}

/*FUNCTION FOR RESCHEDULING BOOKING DATE - PATIENT DASHBOARD*/
public function reScheduleConsultation()
{
	$result = $this->Patient_model->get_Booking($_POST['booking_id']);
	$result['book_date'] = date('d F Y',$result['book_date']);
	$result['doc_pic'] = ''. base_url().$result['doc_pic'].'';
	print json_encode($result);
		
}

/*FUNCTION FOR UPDATING BOOKING DATA ON RESCHEDULING BOOKING DATE - PATIENT DASHBOARD*/
public function updateBooking()
{
	$userdata = $this->session->userdata('UserData');
	//print_r($_POST);
	$this->Patient_model->update_Booking($_POST);
	$confirmed_consultation = $this->Patient_model->get_patient_confirmed_consultation($userdata['id']);
	$template['confirmed_consultation'] = $confirmed_consultation;
	$this->load->view('patient_dash_scheduled_booking',$template);
}

/*CONTROLLER EDIT PROFILE*/
public function editProfile()
{
	if($this->session->userdata('UserData')&&$this->session->userdata('UserData')['type']=="PATIENT")
 	{
 		$userdata = $this->session->userdata('UserData');
 		$template['page'] = "patient_editprofile";
		$template['page_title'] = "Edit Profile";
		$template['data'] = "Patient page";
		$patient_data = $this->Patient_model->get_single_patient($userdata['id']);		//unset($patient_data['pt_gender']);
		$template['patient_data'] = $patient_data;
		$this->load->view('template/template', $template);
	}
	else
	{
		$this->session->set_flashdata('message', array('message' => load_language('session_invalid_error',true), 'title' => 'Error', 'class' => 'danger'));
		header('Location: '.base_url());
	}
}

/*FUNCTION FOR UPDATING PATIENT PROFILE IN DB - EDIT PROFILE*/
public function saveProfile()
{

	$userdata = $this->session->userdata('UserData');
	$_POST['dob'] = strtotime($_POST['dob']);
	if(isset($_POST) and !empty($_POST))
	{
		$update_data = $_POST;
		if(isset($_FILES['profile_photo']['name']) and !empty($_FILES['profile_photo']['name']))
		{
			
			$fileName = $userdata['id'].'_'.$_FILES['profile_photo']['name'];
			$config = set_upload_options('./assets/uploads/profilepic/patient/'); 
			$config['file_name'] = $fileName;
			$this->load->library('upload', $config);
			if ( ! $this->upload->do_upload('profile_photo')) 
			{
				//print_r("expression");die();
				$error = array('error' => $this->upload->display_errors('', '')); 
				$this->session->set_flashdata('message', array('message' => load_language('image_upload_error',true), 'title' => 'Error', 'class' => 'danger'));
				//header('Location: '.base_url().'Doctor/editProfile');
				redirect(base_url().'Patient/editProfile');
			}	
			else 
			{ 
				$imagedata = $this->upload->data(); 
				$fullfilepath='assets/uploads/profilepic/patient/'.$imagedata['file_name'];
				//$picdata = array('profile_pic'=>$fullfilepath);
				$update_data['profile_photo'] = $fullfilepath;
			}
		}
		else
		{
			unset($update_data['profile_photo']);
		}
		
		

		 $update_data = array(
							
							"name"=> encrypt_data($update_data['name']),
							"username"=> $update_data['username'],
							"rg" => encrypt_data($update_data['rg']),
							"dob" => $update_data['dob'],
							"gender" => encrypt_data($update_data['gender']),
							"weight" => encrypt_data($update_data['weight']),
							"height" => encrypt_data($update_data['height']), 
							"blood_group" => encrypt_data($update_data['blood_group']),
							"zip_code" => encrypt_data($update_data['zip_code']),
							"street_address" => encrypt_data($update_data['street_address']),
							"locality" => encrypt_data($update_data['locality']),
							"number" => encrypt_data($update_data['number']),
							"landmark" =>encrypt_data($update_data['landmark']),

							);
		

		$update = $this->Patient_model->update_profile($userdata['id'],$update_data);
		if($update['status']=='success')
		{
			$patient_data = $this->Patient_model->get_single_patient_row($userdata['id']);
			//print_r($patient_data);

			$new_userdata = array(
							"type"=>"PATIENT",
							"id"=> $patient_data['id'],
							"name"=> decrypt_data($patient_data['name']),
							"username"=> $patient_data['username'],
							"email"=> $patient_data['email'],
							"password" => $patient_data['password'],
							"cpf" => $patient_data['cpf'],
							"rg" => decrypt_data($patient_data['rg']),
							"dob" => $patient_data['dob'],
							"gender" => decrypt_data($patient_data['gender']),
							"weight" => decrypt_data($patient_data['weight']),
							"height" => decrypt_data($patient_data['height']), 
							"blood_group" => decrypt_data($patient_data['blood_group']),
							"zip_code" => decrypt_data($patient_data['zip_code']),
							"street_address" => decrypt_data($patient_data['street_address']),
							"locality" => decrypt_data($patient_data['locality']),
							"number" => decrypt_data($patient_data['number']),
							"landmark" =>decrypt_data($patient_data['landmark']),
							"profile_photo" => $patient_data['profile_photo'],
							"bystander_name" => $patient_data['bystander_name'],
	                        "bystander_relation" => $patient_data['bystander_relation'],
	                        "bystander_cpf" => $patient_data['bystander_cpf'],
	                        "bystander_dob" => $patient_data['bystander_dob'],
	                        "bystander_profile_photo" => $patient_data['bystander_profile_photo'],

							);

				$this->session->set_userdata('UserData',$new_userdata);
				header('Location: '.base_url().'Patient');

		}	
		else
		{
			$this->session->set_flashdata('message', array('message' => load_language('updation_failed',true), 'title' => 'Error', 'class' => 'danger'));
			redirect(base_url().'Patient/editProfile');		

		}

	}

}

/*FUNCTION FOR CHECKING EXISTING USERNAME - EDIT PROFILE*/
public function check_username_edit()
{
	$userdata = $this->session->userdata('UserData');
	$data = $_POST;
	if($userdata['username']==$data['username'])
	{
		print json_encode(array('message'=>'success'));
	}
	else
	{
		$check_result = $this->Home_model->usernameExist($data);
		//print_r($check_result);die();
		print json_encode($check_result);
	}
	
}

/*CONTROLLER ADD DEPENDENT*/
public function addDependent()
{
	if($this->session->userdata('UserData')&&$this->session->userdata('UserData')['type']=="PATIENT")
 	{
 		$userdata = $this->session->userdata('UserData');
 		$template['page'] = "patient_add_dependent";
		$template['page_title'] = "Add Dependent";
		$patient_data = $this->Patient_model->get_single_patient($userdata['id']);
		$dependent_data = $this->Patient_model->get_all_dependent_for_patient($userdata['id']);

		/*foreach ($dependent_data as $key => $value) {
			$dateOfBirth = date("Y-m-d",$value['dob']);
			$today = date("Y-m-d");
			$diff = date_diff(date_create($dateOfBirth), date_create($today));
			echo 'Age is '.$diff->format('%y');
		}*/
		$template['patient_data'] = $patient_data;
		$template['dependent_data'] = $dependent_data;
		$this->load->view('template/template', $template);
	}
	else
	{
		$this->session->set_flashdata('message', array('message' => load_language('session_invalid_error',true), 'title' => load_language('error',true), 'class' => 'danger'));
 		header('Location: '.base_url());
	}
}

/*FUNCTION FOR INSERTING DEPENDENT DATA INTO DB - ADD DEPENDENT*/
public function saveDependent()
{
	$userdata = $this->session->userdata('UserData');
	if(isset($_POST) and !empty($_POST))
		{
			$data = $_POST;
			$data['dob'] = strtotime($_POST['dob']);
			$data['patient_id'] = $userdata['id'];
			//print_r($data);die();
			$result = $this->Patient_model->register_dependent($data);
			if($result['status'] == 'success')
			{	
				$fileName = $result['data']['id'].'_'.$_FILES['image']['name'];
				$config = set_upload_options('./assets/uploads/profilepic/patient_dependent/'); 
				$config['file_name'] = $fileName;
				$this->load->library('upload', $config);
				if ( ! $this->upload->do_upload('image')) 
				{
					$error = array('error' => $this->upload->display_errors('', '')); 
					$res = array(
					"status"=> "error",
					"error"=> "Upload Error",
					"message"=> load_language('image_upload_error',true) /*.$error['error']*/
					);	
					$this->Patient_model->delete_registration_dependent($result['data']['id']);
					$this->session->set_flashdata('message', array('message' => load_language('image_upload_error',true), 'title' => 'Error', 'class' => 'danger'));
					redirect(base_url().'Patient/addDependent');
				}	
				else 
				{ 

					$imagedata = $this->upload->data(); 
					$fullfilepath='assets/uploads/profilepic/patient_dependent/'.$imagedata['file_name'];
					$picdata = array('image'=>$fullfilepath);
					$this->Patient_model->updatePic_dependent($picdata,$result['data']['id']);

					$this->session->set_flashdata('message', array('message' =>load_language('dependent_add_success',true), 'title' => 'Success', 'class' => 'success'));
					header('Location: '.base_url().'Patient/addDependent');

				}
			}
			else
			{
				$this->session->set_flashdata('message', array('message' =>load_language('dependent_add_error',true), 'title' => 'Error', 'class' => 'danger'));
				redirect(base_url().'Patient/addDependent');	
			}

	 	
			
		}
}

/*CONTROLLER EDIT DEPENDENT DATA - DEPENDENT*/
public function editDependent()
{
	if($this->session->userdata('UserData')&&$this->session->userdata('UserData')['type']=="PATIENT")
 	{
 		$userdata = $this->session->userdata('UserData');
		$template['page_title'] = "Edit Dependent";
		$patient_data = $this->Patient_model->get_single_patient($userdata['id']);
		$dependent_data = $this->Patient_model->get_all_dependent_for_patient($userdata['id']);
		$template['patient_data'] = $patient_data;
		$template['dependent_data'] = $dependent_data;
		if(!empty($dependent_data))
		{
			if($this->uri->segment(3))
			{
				$dependent_id = $this->uri->segment(3);
				$dependent_detail = $this->Patient_model->get_single_dependent($dependent_id);
				$template['page'] = "patient_edit_dependent";
				$template['dependent_detail'] = $dependent_detail;
				$this->load->view('template/template', $template);
			}
			else
			{
				$template['page'] = "patient_view_dependent";
				$this->load->view('template/template', $template);
			}
		}
		else
		{
			$this->session->set_flashdata('message', array('message' => load_language('no_dependent_found',true), 'title' => 'Warning', 'class' => 'info'));
			header('Location: '.base_url().'Patient/addDependent');
		}
	}
	else
	{
		$this->session->set_flashdata('message', array('message' => load_language('session_invalid_error',true), 'title' => 'Error', 'class' => 'danger'));
		header('Location: '.base_url());
	}
}

/*FUNCTION FOR UPDATING DEPENDENT DATA TO DB - DEPENDENT*/
public function updateDependent()
{	
	$userdata = $this->session->userdata('UserData');
	if(isset($_POST) and !empty($_POST))
	{
		$data = $_POST;
		$data['dob'] = strtotime($_POST['dob']);
		//print_r($_FILES['image']);die();
		if(isset($_FILES['image']['name']) and !empty($_FILES['image']['name']))
		{
			$fileName = $data['dependent_id'].'_'.$_FILES['image']['name'];
			$config = set_upload_options('./assets/uploads/profilepic/patient_dependent/'); 
			$config['file_name'] = $fileName;
			$this->load->library('upload', $config);
			if ( ! $this->upload->do_upload('image')) 
			{
				//print_r("expression");die();
				$error = array('error' => $this->upload->display_errors('', '')); 
				$this->session->set_flashdata('message', array('message' => 'Profile Photo Cant be Uploaded, Try Again', 'title' => 'Error', 'class' => 'danger'));
				//header('Location: '.base_url().'Doctor/editProfile');
				unset($data['image']);
				redirect(base_url().'Patient/editDependent/'.$data['dependent_id']);
			}	
			else 
			{ 
				$imagedata = $this->upload->data(); 
				$fullfilepath='assets/uploads/profilepic/patient_dependent/'.$imagedata['file_name'];
				//$picdata = array('profile_pic'=>$fullfilepath);
				$data['image'] = $fullfilepath;
			}
		}
		else
		{
			unset($data['image']);
		}

		$update = $this->Patient_model->update_dependent_profile($data['dependent_id'],$data);
		if($update['status']=='success')
		{
			$dependent_data = $this->Patient_model->get_all_dependent_for_patient($userdata['id']);
			if(!empty($dependent_data)){$this->session->set_userdata('DependentData',$dependent_data);}
			redirect(base_url().'Patient/editDependent');
		}
		else
		{
			$error = array('error' => $this->upload->display_errors('', '')); 
			$this->session->set_flashdata('message', array('message' => load_language('dependent_update_failed',true), 'title' => 'Error', 'class' => 'danger'));
			//header('Location: '.base_url().'Doctor/editProfile');
			redirect(base_url().'Patient/editDependent'.$data['dependent_id']);
		}


	}
}

/*FUNCTION FOR CHECKING CREDENTIALS OF CURRENTLY LOGEDIN PATIENT - DELETE ACCOUNT*/
public function check_current_user_credential()
{

	$userdata = $this->session->userdata('UserData');
	if($_POST['username']==$userdata['username'])
	{
		$db_pass = $this->Patient_model->get_patient_password($userdata['id']);
		$enterd_pass = md5($_POST['password']);
		if($db_pass['password']==$enterd_pass)
		{
			$this->sentConfirmationcode($userdata);
			$res = array('status' =>'success' , 'msg'=>load_language('valid_credentials',true));
		}
		else
		{
			$res = array('status' =>'error' , 'msg'=>load_language('invalid_credentials',true));
		}
		
	}
	else
	{
		$res = array('status' =>'error' , 'msg'=>load_language('invalid_credentials',true));
	}
	print json_encode($res);	
}

/*FUNCTION FOR CHECKING CONFIRMATION CODE OF CURRENTLY LOGEDIN PATIENT - DELETE ACCOUNT*/
public function check_current_user_confirmationcode()
{
	$userdata = $this->session->userdata('UserData');
	$db_confirmation_code = $this->Patient_model->get_patient_confirmation_code($userdata['id']);
	if($db_confirmation_code['confirmation_code']==strtoupper($_POST['confirmation_code']))
	{
		$res = array('status' => 'success','msg'=>load_language('valid_code',true) );
		$this->Patient_model->disable_patient_account($userdata['id']);
	}
	else
	{
		$res = array('status' => 'error','msg'=>'Invalid Code' );
	}
	print json_encode($res);
}

/*FUNCTION FOR VIEWING ALL DOCTORS APPLICABLE FOR GIVEN PROMOCODE - PATIENT DASH*/
public function promocode()
{
	if($this->uri->segment(3))
	{
		$promo_id = $this->uri->segment(3);
		//print_r($promo_id);
		$promo_data = $this->Patient_model->get_promocode_details($promo_id);
		//print_r($promo_data);
		$doctor_applicable = explode(",",$promo_data['doctor_id']);
	/*	$ids = join("','",$doctor_applicable);   
		print_r($ids);die();*/
		$all_doctors = $this->Search_doctor_model->get_doctors_for_promocode($promo_id,$doctor_applicable);
		//print_r($all_doctors);die();
		$template['doctors_list'] = $all_doctors;
		$template['page'] = "patient_doctors_for_promocodes";
		$template['page_title'] = "Promocode";

		$this->load->view('template/template', $template);
	}
	else
	{
		redirect(base_url().'Patient');
	}


}

/*FUNCTION FOR SENTING CONFRIMATION CODE FOR ACCOUNT DELETION - PATIENT AND DOCTOR*/
	public function sentConfirmationcode($user)
	{
		$characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
	    $result = '';
	    for ($i = 0; $i < 8; $i++)
	        $result .= $characters[mt_rand(0, 35)];
		$msg = "Hi ".$user['name'].",<br><br>Your Confirmation Code for Ipok Account Deactivation is ".$result.".

				<br><br>Ipok Team";
	
		send_mail($msg,$user['email'],'Account Deactivation');
		$this->Patient_model->set_confirmation_code($user,$result);
	}

/*FUNCTION FOR SENTING MAIL */
/*	public function send_mail($msg,$email,$sub)
	{
 		$settings = $this->db->get('settings')->row();
   
   		$configs = array(
		'protocol'=>'smtp',
		'smtp_host'=>$settings->smtp_host,
		'smtp_user'=>$settings->smtp_username,
		'smtp_pass'=>$settings->smtp_password,
		'smtp_port'=>'587',
		'smtp_timeout'=>20,
        'mailtype' => 'html',
        'charset' => 'iso-8859-1',
        'wordwrap' => TRUE
		); 

		$this->load->library('email', $configs);
		$this->email->initialize($configs);
		$this->email->set_newline("\r\n");
		$this->email
			->from($settings->admin_email, 'Ipok')
			->to($email)
			->subject($sub)
			->message($msg);
		$this->email->send();
  	}
*/
/* FUNCTION FOR VIEWING MEDICAL RECORD FOR GIVEN BOOKING ID - COMPLETED CONSULTATION,PATIENT DASHBOARD*/

public function record()
{
	
	if($this->session->userdata('UserData')&&($this->session->userdata('UserData')['type']=="PATIENT")&&(!empty($this->uri->segment(3))))
 	{
 		$booking_id = $this->uri->segment(3);
 		$booking_details = $this->Doctor_model->get_booking_details($booking_id);
 		$record_data = $this->Doctor_model->get_medical_record_for_booking($booking_id);
 		if(!empty($record_data))
 		{
 			$doctor_data = $this->Doctor_model->get_single_doctor($booking_details['doc_id']);
	 		$patient_data = $this->Patient_model->get_single_patient($booking_details['pat_id']);

	 		//echo "<pre>";print_r($record_data);echo "<br>";
	 		$record_data['diseases'] = json_decode(decrypt_data($record_data['diseases']));
	 		$record_data['prescribtions'] = json_decode(decrypt_data($record_data['prescribtions']));
	 		$record_data['exams'] = json_decode(decrypt_data($record_data['exams']));
	 		$record_data['budget'] = json_decode(decrypt_data($record_data['budget']));
	 		$record_data['letters'] = json_decode(decrypt_data($record_data['letters']));


	 		//echo "<pre>";print_r($record_data);die();
			$template['page'] = "patient_dash_service_summary";
			$template['page_title'] = "Record";
			$template['record_data'] = $record_data;
			$template['booking_details'] = $booking_details;
			$template['doctor_data'] = $doctor_data;
			$template['patient_data'] = $patient_data;
			$this->load->view('template/template', $template);
		}
		else
		{
			header('Location: '.base_url().'Home/error/url');
		}
 	}
 		
	else
	{
		$this->session->set_flashdata('message', array('message' => load_language('session_invalid_error',true), 'title' => load_language('error',true), 'class' => 'danger'));
 		header('Location: '.base_url());
	}
}

 /*FUNCTION FOR PATIENT CHAT*/
 public function chat()
 {
 	if($this->session->userdata('UserData')&&$this->session->userdata('UserData')['type']=="PATIENT")
 	{
 		$userdata = $this->session->userdata('UserData');
 		$template['page'] = 'chat';
 		$template['page_title'] = "Chat";
		$this->load->view('template/template', $template);
 	}
 	else
 	{
 		redirect(base_url());
 	}
 }

 public function notification()
 {
 		if($this->session->userdata('UserData')&&$this->session->userdata('UserData')['type']=="PATIENT")
 	{
 		$userdata = $this->session->userdata('UserData');

 		$page = 1;
 		$notifications = $this->Patient_model->get_notifications($userdata['id'],$page);
 		//echo "<pre>";
 		//print_r($notifications);die();
 		$notifications_total_count = $this->Patient_model->get_notifications_total_count($userdata['id']);
 		//print_r($notifications_total_count);die();
 		$template['page'] = 'patient_notifications_page';
 		$template['page_title'] = "Notification";
 		$template['notifications'] = $notifications;
 		$template['notifications_total_count'] = $notifications_total_count[0];
 		$template['notifications_page_no'] = $page;

		$this->load->view('template/template', $template);

 	}
 }

 public function notification_ajax()
{
	$userdata = $this->session->userdata('UserData');
	$page = 1;
	if(!empty($_POST))
	{$page = $_POST['page']+1;}
	$notifications = $this->Patient_model->get_notifications($userdata['id'],$page);
	$notifications_total_count = $this->Patient_model->get_notifications_total_count($userdata['id']);
	//print_r($notifications);die();
	$template['notifications'] = $notifications;
	$template['notifications_total_count'] = $notifications_total_count[0];
	$template['notifications_page_no'] = $page;

	$this->load->view('patient_notifications_list', $template);
}


	
	
}