<?php 
//generate PDF file
require_once('../ext/mpdf/mpdf.php'); 
//send php mail with attachment
require_once('../ext/PHPMailer/class.phpmailer.php');

class Email{

	public static function send_email_attachment($receipant,$subject,$email_body,$from_name,$from_email,$bcc_from_mail = false,$attachment=array()){
	
		$mail = new PHPMailer;
		$mail->From = $from_email;
		$mail->FromName = $from_name;
		$mail->addAddress($receipant);  // Add a recipient
		$mail->addReplyTo($from_email, $from_name);
		if($bcc_from_mail)
			$mail->addBCC($from_email);
		
		$mail->WordWrap = 50; // Set word wrap to 50 characters
		$mail->isHTML(true); // Set email format to HTML

		$mail->Subject = $subject;
		$mail->Body    = $email_body;
		
		$default = array('has_attachment' => false,
						'name' => '',
						'filepath' => THE_TEMP_DIR . '/',
						);
		$attachment = array_merge($default,$attachment);
		if($attachment['has_attachment']){
			$mpdf=new mPDF('c','A4');
			$mpdf->SetDisplayMode('fullpage');
$header = '
<table width="100%" style="border-bottom: 1px solid #000000; vertical-align: bottom; font-family: serif; font-size: 9pt; color: #000088;"><tr>
<td width="33%"><a href="'.THE_ROOT_URL.'" target="_blank"><img src="'.THE_ROOT_URL.'/images/logo.jpg" border="0"></a></td>
<td width="33%" align="center" style="font-size:12px;">
<b> LHN Vehicle Parking Management Pte Ltd</b>
<br>10 Raeburn Park #02-18
<br>Singapore 088702
<br>Tel. (65) 6368 8328
<br>Fax. (65) 6367 2163
<br>Co. Reg. No. 200716389D
<br>GST Reg. No. 200716389D
<br>Web: <a href="http://lhnparking.com.sg" target="_blank">www.lhnparking.com.sg</a>
<br>
</td>
<td width="33%" style="text-align: right;"></td>
</tr></table>
';
$mpdf->SetHTMLHeader($header);
$html = '
<h1>mPDF</h1>
<h2>Headers & Footers Method 2</h2>
<h3>Odd / Right page</h3>
<p>Nulla felis erat, imperdiet eu, ullamcorper non, nonummy quis, elit. Suspendisse potenti. Ut a eros at ligula vehicula pretium. Maecenas feugiat pede vel risus. Nulla et lectus. Fusce eleifend neque sit amet erat. Integer consectetuer nulla non orci. Morbi feugiat pulvinar dolor. Cras odio. Donec mattis, nisi id euismod auctor, neque metus pellentesque risus, at eleifend lacus sapien et risus. Phasellus metus. Phasellus feugiat, lectus ac aliquam molestie, leo lacus tincidunt turpis, vel aliquam quam odio et sapien. Mauris ante pede, auctor ac, suscipit quis, malesuada sed, nulla. Integer sit amet odio sit amet lectus luctus euismod. Donec et nulla. Sed quis orci. </p>
<pagebreak />
<h3>Even / Left page</h3>
<p>Nulla felis erat, imperdiet eu, ullamcorper non, nonummy quis, elit. Suspendisse potenti. Ut a eros at ligula vehicula pretium. Maecenas feugiat pede vel risus. Nulla et lectus. Fusce eleifend neque sit amet erat. Integer consectetuer nulla non orci. Morbi feugiat pulvinar dolor. Cras odio. Donec mattis, nisi id euismod auctor, neque metus pellentesque risus, at eleifend lacus sapien et risus. Phasellus metus. Phasellus feugiat, lectus ac aliquam molestie, leo lacus tincidunt turpis, vel aliquam quam odio et sapien. Mauris ante pede, auctor ac, suscipit quis, malesuada sed, nulla. Integer sit amet odio sit amet lectus luctus euismod. Donec et nulla. Sed quis orci. </p>
';
			
			$mpdf->WriteHTML($html);

			$pdf_name = $attachment['name'].'.pdf';
			$filepath = $attachment['filepath'];
			$pdf_file = $filepath . $pdf_name;
			$mpdf->Output($pdf_file,'F');
			
			$mail->addAttachment($pdf_file);  //attachment
		}
		
		if(!$mail->send()) {
		   //$msg_emailbody .= '<br>FAIL to send to '.$receipant;
		   //$msg_emailbody .= '<br>Error: '.$mail->ErrorInfo;					   
		   return false;
		}else{
			
			//$msg_emailbody .= '<br>Sent to '.$receipant;
			
			if($attachment['has_attachment']){
				unlink($pdf_file);
			}
			
			return true;
		}		
	}

	public static function send_email($receipant,$subject,$email_body,$from_name,$from_email,$bcc_from_mail = false){
		$hdr_nl = "\r\n";
		$header  = "MIME-Version: 1.0$hdr_nl";
		$header .= 'Content-Type: text/html; charset="uft8"' . $hdr_nl;
		$header .= "From: \"$from_name\" <$from_email>$hdr_nl";
		$header .= "Reply-To: $from_email$hdr_nl";
		$header .= "Return-Path: $from_email$hdr_nl";
		//$header .= "CC: $from_email$hdr_nl" ;
		if($bcc_from_mail)
			$header .= "BCC: $from_email$hdr_nl" ;
		
		//Send out email 
		$email = mail($receipant,$subject,$email_body,$header);
		return $email;
		
	}

	public static function get_email_html($new_data,$file){
		
		if(!is_array($new_data)) return false;
		if(!file_exists($file))return false;
		
		$default = array( 'site_url' => THE_ROOT_URL,
						  'logo_url' => THE_ROOT_URL.'/images/logo.jpg',	
						 );
		$data = array_merge($default,$new_data);
		$body = file_get_contents($file);
		foreach($data as $k=>$v){
			$body = str_replace('%'.$k.'%' , $v, $body);
		}
		return $body;
	}


/*-------------------------------------------
	Invoices / receipt
-------------------------------------------*/
	public static function prepare_receipt($subscription_id,$file='email_receipt.html'){
		//get config data;
		$config = Gfc::get_all_configs();
	
		$subscription = Orders::get_subscription($subscription_id);
		if(empty($subscription))
			return false;
			
		$user = Users::get_user($subscription['user_id']);
		$subscription_items = Orders::get_subscription_items($subscription_id);

		list($receipt_id, $receipt_date) = Orders::draw_invoice_id($subscription_id);
		$customer_no = Orders::prepare_customer_id($subscription['user_id']);

		$items_html = self::prepare_invoice_items($subscription_items);
	
		$htmldetail = array(//User detail
							 'user_company' 	=> $user['company_name'],
							 'user_address' 	=> str_replace("\r\n",'<br>',$user['address']),
							 'user_salutation' 	=> Users::get_salutation_label($user['salutation_id']),
							 'user_display_name'=> $user['display_name'],
							 'user_email'		=> $subscription['email'],
							 'remarks'			=> '',
							 //Receipt detail
							 'receipt_number' 	=> $receipt_id,
							 'receipt_date' 	=> Tools::change_date_format($receipt_date,$config['date_format']),
							 'customer_number' 	=> $customer_no,
							 'subscription_id' 	=> $subscription_id,
							 //detail
							 'items' 		=> $items_html,
							 'item_remarks' => '',
							 'gst' 			=> $config['gst'],
							 'total_tax' 	=> $subscription['tax_amt'],//number_format($subscription['tax_amt'],2),
							 'total_amount' => $subscription['total_amt'],//number_format($subscription['total_amt'],2), //Follow database
							 'grand_total' 	=> $subscription['subtotal']//number_format($subscription['subtotal'],2) //Follow database
							 );		
				 
		return ($body = self::get_email_html($htmldetail,$file));
	}

	public static function prepare_invoice($subscription_id,$file='email_invoice.html'){
		//get config data;
		$config = Gfc::get_all_configs();
	
		$subscription = Orders::get_subscription($subscription_id);
		if(empty($subscription))
			return false;
			
		$user = Users::get_user($subscription['user_id']);
		$subscription_items = Orders::get_subscription_items($subscription_id);
		
		list($invoice_id, $invoice_date) = Orders::draw_invoice_id($subscription_id);
		$customer_no = Orders::prepare_customer_id($subscription['user_id']);
		
		$items_html = self::prepare_invoice_items($subscription_items);

		$htmldetail = array(//User detail
							 'user_company' 	=> $user['company_name'],
							 'user_address' 	=> str_replace("\r\n",'<br>',$user['address']),
							 'user_salutation' 	=> Users::get_salutation_label($user['salutation_id']),
							 'user_display_name'=> $user['display_name'],
							 'user_email'		=> $subscription['email'],
							 'remarks'			=> '',
							 //Invoice detail
							 'invoice_number' 	=> $invoice_id,
							 'invoice_date' 	=> Tools::change_date_format($invoice_date,$config['date_format']),
							 'customer_number' 	=> $customer_no,
							 'subscription_id' 	=> $subscription_id,
							 //detail
							 'items' 		=> $items_html,
							 'item_remarks' => '',
							 'gst' 			=> $config['gst'],
							 'total_tax' 	=> $subscription['tax_amt'],
							 'total_amount' => $subscription['total_amt'], //Follow database
							 'grand_total' 	=> $subscription['subtotal'] //Follow database
							 );
							 				 
		//return $body = self::get_invoice_html($htmldetail);
		return $body = self::get_email_html($htmldetail,$file);

	}

	public static function prepare_invoice_items($subscription_items){
		$no = 0;
		$html_invoice_item = '';
		foreach((array)$subscription_items as $item_detail){										
			//prepare invoice: item detail
			list($item_html,$no,$total_prods,$total_tax) = Email::draw_invoice_item($item_detail,$no,$total_prods,$total_tax);
			$html_invoice_item .= $item_html;
		}
		return $html_invoice_item;
	}

	public static function draw_invoice_item($item,$item_no=0,$prod_total=0,$tax_total=0){
		
		if(empty($item))
			return array('',$item_no,$prod_total,$tax_total);
			
		$config = Gfc::get_all_configs();
		
		$tax_charge = number_format(($item['price_tax']/100),2);
		$sub_total = number_format(($item['charge'] + $item['prorate']),2);
		
		//to prevent date error:
		$start_date = Tools::change_date_format($item['date_start'],'Y-m-d');
		$stop_date = (strtotime($item['due_date'])<=0 || $item['due_date']=='0000-00-00 00:00:00')? '': Tools::change_date_format($item['due_date'],'Y-m-d');
		
		//return values
		$item_no++; //increase no.      number_format(($fee_prorate+$fee_months),2);
		$prod_total += $sub_total;
		$tax_total += ($sub_total * $tax_charge);
		
		$mths_prorated = $mths_charge = 0;
		$mths_total = Calculator::cal_total_month($start_date, $item['price_structure_id'], $item['count']);
		
		$data_prorated 	= '';
		$data_charge 	= '';
		$data_date 		= '';
		$data_desc		= '';
		$email_html 	= '';

		$new_month_date = $item['date_start'];
		if($item['prorate']>0){
			$mths_prorated = 1;
			$prorated_mth = date('F Y',strtotime($start_date));
			$data_prorated = '
				<tr style="height:20px;">
					<td>&nbsp;</td>
					<td><p>Pro-rated Fee For '.$prorated_mth.'</p></td>
					<td align="center">1</td>
					<td align="right">'.number_format($item['prorate'],2).'</td>
					<td align="right">'.number_format($item['prorate'],2).'</td>
				</tr>';
				
			#prepare for $item['charge'] detail:
			$date_from = date('Y-m-01',strtotime($start_date));
			$new_date_timestamp = strtotime('1 month', strtotime($date_from) );
			$new_month_date = date('Y-m-d',$new_date_timestamp);
		}

		if($item['charge']>0){
			$mths_charge = $mths_total-$mths_prorated;
			$charge_mth_start = date('F Y',strtotime($new_month_date));
			$txt = 'Season Parking Fee For '.$charge_mth_start;
			if($stop_date!=''){
				$charge_mth_end = date('F Y',strtotime($stop_date));
				$txt .= ' to '.$charge_mth_end;
			}
			$data_charge = '
				<tr style="height:20px;">
					<td>&nbsp;</td>
					<td><p>'.$txt.'</p></td>
					<td align="center">'.$mths_charge.'</td>
					<td align="right">'.number_format($item['price'],2).'</td>
					<td align="right">'.number_format($item['charge'],2).'</td>
				</tr>';
		}
		
		if(!empty($stop_date)){
			$data_date = '
				<tr style="height:20px;">
					<td>&nbsp;</td>
					<td><br><span style="color:#FF3333; font-size:12px"><b>Subscription starts from '.Tools::change_date_format($start_date,$config['date_format']).' to '.Tools::change_date_format($stop_date,$config['date_format']).'</b></span></td>
					<td align="center">&nbsp;</td>
					<td align="right">&nbsp;</td>
					<td align="right">&nbsp;</td>
				</tr>';
		}

		if(!empty($item['description'])){
			$data_desc = '
				<tr style="height:20px; font-size:12px;">
					<td align="center">&nbsp;</td>
					<td><br><u>Description</u>
						<br>'.$item['description'].'
					</td>
					<td align="center">&nbsp;</td>
					<td align="right">&nbsp;</td>
					<td align="right">&nbsp;</td>
				</tr>';
		}
		
		#draw item html		
		$item_html .= '
				<tr style="height:20px;">
					<td align="center"><b>'.$item_no.'.</b></td>
					<td align="left"><b>'.$item['item_name'].'</b></td>
					<td align="center">&nbsp;</td>
					<td align="right">&nbsp;</td>
					<td align="right">&nbsp;</td>
				</tr>
				'.$data_prorated.'
				'.$data_charge.'
				<tr style="height:20px; font-size:12px;">
					<td align="center">&nbsp;</td>
					<td><u>Vehicle Detail</u>
						<br>Car Plate No.: '.$item['txtVeh'].'
						<br>Type: '.$item['cartype'].'
						<br>IU No.: '.$item['txtIU'].'
					</td>
					<td align="center">&nbsp;</td>
					<td align="right">&nbsp;</td>
					<td align="right">&nbsp;</td>
				</tr>
				'.$data_desc.'
				'.$data_date.'
				
		';
		
		return array($item_html,$item_no,$prod_total,$tax_total);
	}

	public static function get_invoice_html($new_data,$file='email_invoice.html'){
		$default = array(//User detail
						 'user_company' => '',
						 'user_address' => '',
						 'user_salutation' => '',
						 'user_display_name' => '',
						 'user_email' => '',
						 'remarks' => '',
						 //Invoice detail
						 'invoice_number' => '',
						 'invoice_date' => '',
						 'customer_number' => '',
						 'subscription_id' => '',
						 //detail
						 'items' => '',
						 'item_remarks' => '',
						 'gst' => '',
						 'total_amount' => '',
						 'total_tax' => '',
						 'grand_total' => ''
						 );
		
		$data = array_merge($default,$new_data);
		return self::get_email_html($data,$file);
	}
	//prepare_invoice
	public static function prepare_new_subscription_pending($subscription_id,$file='email_newsub_pending.html'){
		//get config data;
		$config = Gfc::get_all_configs();
	
		$subscription = Orders::get_subscription($subscription_id);
		if(empty($subscription))
			return false;
			
		$user = Users::get_user($subscription['user_id']);
		$subscription_items = Orders::get_subscription_items($subscription_id);
		
		list($invoice_id, $invoice_date) = Orders::draw_invoice_id($subscription_id);
		$customer_no = Orders::prepare_customer_id($subscription['user_id']);
		
		$items_html = self::prepare_invoice_items($subscription_items);

		$htmldetail = array(//User detail
							 'user_company' 	=> $user['company_name'],
							 'user_address' 	=> str_replace("\r\n",'<br>',$user['address']),
							 'user_salutation' 	=> Users::get_salutation_label($user['salutation_id']),
							 'user_display_name'=> $user['display_name'],
							 'user_email'		=> $subscription['email'],
							 'remarks'			=> '',
							 //Invoice detail
							 'invoice_number' 	=> $invoice_id,
							 'invoice_date' 	=> Tools::change_date_format($invoice_date,$config['date_format']),
							 'customer_number' 	=> $customer_no,
							 'subscription_id' 	=> $subscription_id,
							 //detail
							 'items' 		=> $items_html,
							 'item_remarks' => '',
							 'gst' 			=> $config['gst'],
							 'total_tax' 	=> $subscription['tax_amt'],
							 'total_amount' => $subscription['total_amt'], //Follow database
							 'grand_total' 	=> $subscription['subtotal'] //Follow database
							 );
					 				 
		//return $body = self::get_invoice_html($htmldetail);
		return $body = self::get_email_html($htmldetail,$file);

	}
	
	public static function prepare_pdf($id){
		
			
	}
	
}
?>