<?php
/**
 * $Desc$
 *
 * @version    $Id$
 * @package    $package$
 * @author     Opal  Team <info@wpopal.com >
 * @copyright  Copyright (C) 2014 wpopal.com. All Rights Reserved.
 * @license    GNU/GPL v2 or later http://www.gnu.org/licenses/gpl-2.0.html
 *
 * @website  http://www.wpopal.com
 * @support  http://www.wpopal.com/support/forum.html
 */

// Exit if accessed directly
if ( !defined( 'ABSPATH' ) ) exit;

/**
 * @class OpalMembership_Checkout
 *
 * @version 1.0
 */
class Opalestate_Emails {

	
	/**
	 * init action to automatic send email when user edit or submit a new submission and init setting form in plugin setting of admin
	 */
	public static function init() {

		self::load();

	  	add_action(  'opalestate_processed_new_submission' , array( __CLASS__ , 'new_submission_email'), 10, 2 );
	  	//add_action(  'opalestate_processed_edit_submission' , array( __CLASS__ , 'new_submission_email'), 10, 2 );
	  	if( is_admin() ){
	  		add_filter( 'opalestate_settings_tabs', array( __CLASS__, 'setting_email_tab'), 1 );
	  		add_filter( 'opalestate_registered_emails_settings', array( __CLASS__, 'setting_email_fields'), 10, 1   );
	  	}

        $enable_approve_property_email = opalestate_get_option( 'enable_approve_property_email' );

	  	if ( $enable_approve_property_email == 'on' ) {
            add_action(  'transition_post_status', array( __CLASS__, 'send_email_when_publish_property') , 10, 3 );
            add_action(  'opalestate_processed_approve_publish_property', array( __CLASS__, 'approve_publish_property_email') , 10, 1 );
        }

        /**
         * Send email when User contact via Enquiry Form and Contact Form
         */
      	add_action( 'opalestate_send_email_notifycation', array(__CLASS__,'send_notifycation')  );  
      	add_action( 'opalestate_send_email_submitted',    array(__CLASS__,'new_submission_email')  );  	
      	add_action( 'opalestate_send_email_request_reviewing', array( __CLASS__, 'send_email_request_reviewing') );
	}

	/**
	 *
	 */
	public static function load() {

		require_once OPALESTATE_PLUGIN_DIR . 'inc/email/class-opalestate-abs-email-template.php';
		require_once OPALESTATE_PLUGIN_DIR . 'inc/email/class-opalestate-email-notifycation.php';
		require_once OPALESTATE_PLUGIN_DIR . 'inc/email/class-opalestate-request-viewing.php';
		require_once OPALESTATE_PLUGIN_DIR . 'inc/email/class-opalestate-new-submitted.php';
		require_once OPALESTATE_PLUGIN_DIR . 'inc/email/class-opalesate-approve.php';	
	}

	/**
	 * Send Email Notifycation with two types: Enquiry or Contact
	 */
	public static function send_notifycation ( $content ) {
 
		$mail = new OpalEstate_Send_Email_Notification() ;
		$mail->set_args ( $content );
		
		$return =  self::send_mail_now( $mail );

		if( isset($content['data']) ){
			$return['data'] = $content['data'];
		}
		echo json_encode( $return ); die();
	}



	/**
	 * send email if agent submit a new property
	 */
	public static function new_submission_email( $user_id,  $post_id ){

		$mail = new OpalEstate_Send_Email_New_Submitted() ;

		$mail->set_pros( $post_id, $user_id );

		$return =  self::send_mail_now( $mail );

	 
		echo json_encode( $return ); die();

	}

	/**
	 * Send email to requet viewing a property
	 */
	public static function send_email_request_reviewing( $content ){

		$mail = new OpalEstate_Send_Email_Request_Reviewing();
		$mail->set_args( $content );

		$return =  self::send_mail_now( $mail );


		echo json_encode( $return ); die();
		
	}

	/**
	 *
	 */
	public static function send_mail_now( $mail ){

 		$from_name 	= $mail->from_name();
		$from_email = $mail->from_email(); 
		$headers 	= sprintf( "From: %s <%s>\r\n Content-type: text/html", $from_name, $from_email );

		$subject 	= $mail->get_subject(); 
		$message    = $mail->get_body(); 

		if(  $mail->to_email() ) {

			if( $mail->get_cc() ){
				$status = @wp_mail( $mail->get_cc(), $subject, $message, $headers );
		 	}

		 	$status =  @wp_mail( $mail->to_email(), $subject, $message, $headers );
			$return = array( 'status' => true, 'msg' => esc_html__( 'Message has been successfully sent.', 'opalestate-pro' ) );

		} else {
			$return = array( 'status' => true, 'msg' => esc_html__( 'Message has been successfully sent.', 'opalestate-pro' ) );
		}

		return $return;
	}

	/**
	 *
	 */
    public static function send_email_when_publish_property( $new_status, $old_status, $post ) {

	    if( is_object( $post ) ){
            if ( $post->post_type == 'opalestate_property' ) {
                if ( $new_status != $old_status ) {
                    if ($new_status == 'publish' ) {
                        if ($old_status == 'draft' || $old_status == 'pending') {
                            // Send email
                            $post_id = $post->ID;
                            do_action( "opalestate_processed_approve_publish_property", $post_id  );
                        }
                    }
                }
            }
        }

    }

	/**
	 * add new tab Email in opalestate -> setting
	 */
	public static function setting_email_tab( $tabs ){

		$tabs['emails'] = esc_html__( 'Email', 'opalestate-pro' );
		return $tabs;
	}	

	public static function newproperty_email_body(){
	 
	}
 	
 	public static function approve_email_body(){
 		
 	}		

	/**
	 * render setting email fields with default values
	 */
	public static function setting_email_fields( $fields ){ 

		$contact_list_tags = '<div>
				<p class="tags-description">Use the following tags to automatically add property information to the emails. Tags labeled with an asterisk (*) can be used in the email subject as well.</p>
				
				<div class="opalestate-template-tags-box">
					<strong>{receive_name}</strong> Name of the agent who made the property
				</div>

				<div class="opalestate-template-tags-box">
					<strong>{property_link}</strong> Property of the user who made the property
				</div>
	
				<div class="opalestate-template-tags-box">
					<strong>{name}</strong> Name of the user who contact via email form
				</div>

				<div class="opalestate-template-tags-box">
					<strong>{email}</strong> Email of the user who contact via email form
				</div>

				<div class="opalestate-template-tags-box">
					<strong>{property_link}</strong> * Link of the property
				</div>
			
				<div class="opalestate-template-tags-box">
					<strong>{message}</strong> * Message content of who sent via form
				</div>

				</div> ';

		$list_tags = '<div>
				<p class="tags-description">Use the following tags to automatically add property information to the emails. Tags labeled with an asterisk (*) can be used in the email subject as well.</p>
				
				<div class="opalestate-template-tags-box">
					<strong>{property_name}</strong> Email of the user who made the property
				</div>

				<div class="opalestate-template-tags-box">
					<strong>{property_link}</strong> Email of the user who made the property
				</div>
	
				<div class="opalestate-template-tags-box">
					<strong>{user_email}</strong> Email of the user who made the property
				</div>

				<div class="opalestate-template-tags-box">
					<strong>{submitted_date}</strong> Email of the user who made the property
				</div>

				<div class="opalestate-template-tags-box">
					<strong>{user_name}</strong> * Name of the user who made the property
				</div>
			
				<div class="opalestate-template-tags-box">
					<strong>{date}</strong> * Date and time of the property
				</div>

				<div class="opalestate-template-tags-box">
					<strong>{site_name}</strong> The name of this website
				</div>
				<div class="opalestate-template-tags-box">
					<strong>{site_link}</strong> A link to this website
				</div>
				<div class="opalestate-template-tags-box">
					<strong>{current_time}</strong> Current date and time
				</div></div>';

		$list_tags = apply_filters( 'opalestate_email_tags', $list_tags );
				

		$fields = array(
			'id'         => 'options_page',
			'title' => esc_html__( 'Email Settings', 'opalestate-pro' ),
			'show_on'    => array( 'key' => 'options-page', 'value' => array( 'opalestate_settings' ), ),
			'fields'     => apply_filters( 'opalestate_settings_emails', array(
					array(
						'name' => esc_html__( 'Email Settings', 'opalestate-pro' ),
						'desc' => '<hr>',
						'id'   => 'opalestate_title_email_settings_1',
						'type' => 'title'
					),
					array(
						'id'      => 'from_name',
						'name'    => esc_html__( 'From Name', 'opalestate-pro' ),
						'desc'    => esc_html__( 'The name donation receipts are said to come from. This should probably be your site or shop name.', 'opalestate-pro' ),
						'default' => get_bloginfo( 'name' ),
						'type'    => 'text'
					),
					array(
						'id'      => 'from_email',
						'name'    => esc_html__( 'From Email', 'opalestate-pro' ),
						'desc'    => esc_html__( 'Email to send donation receipts from. This will act as the "from" and "reply-to" address.', 'opalestate-pro' ),
						'default' => get_bloginfo( 'admin_email' ),
						'type'    => 'text'
					),

				

			 		array(
						'name' => esc_html__( 'Email Submission Templates (Template Tags)', 'opalestate-pro' ),
						'desc' => $list_tags.'<br><hr>',
						'id'   => 'opalestate_title_email_settings_2',
						'type' => 'title'
					),

				

					array(
						'name' => esc_html__( 'Notification For New Property Submission', 'opalestate-pro' ),
						'desc' => '<hr>',
						'id'   => 'opalestate_title_email_settings_3',
						'type' => 'title'
					),
				

					array(
						'id'      			=> 'newproperty_email_subject',
						'name'    			=> esc_html__( 'Email Subject', 'opalestate-pro' ),
						'type'    			=> 'text',
						'desc'				=> esc_html__( 'The email subject for admin notifications.', 'opalestate-pro' ),
						'attributes'  		=> array(
	        										'placeholder' 		=> 'Your package is expired',
	        										'rows'       	 	=> 3,
	    										),
						'default'			=>  esc_html__( 'New Property Listing Submitted: {property_name}', 'opalestate-pro' )

					),
					array(
						'id'      => 'newproperty_email_body',
						'name'    => esc_html__( 'Email Body', 'opalestate-pro' ),
						'type'    => 'wysiwyg',
						'desc'	=> esc_html__( 'Enter the email an admin should receive when an initial payment request is made.', 'opalestate-pro' ),
						'default' => OpalEstate_Send_Email_New_Submitted::get_default_template(),
					),	
					//------------------------------------------
					array(
						'name' => esc_html__( 'Approve property for publish', 'opalestate-pro' ),
						'desc' => '<hr>',
						'id'   => 'opalestate_title_email_settings_4',
						'type' => 'title'
					),

                    array(
                        'name'    		=> esc_html__( 'Enable approve property email', 'opalestate-pro' ),
                        'desc'			=> esc_html__( 'Enable approve property email.', 'opalestate-pro' ),
                        'id'      => 'enable_approve_property_email',
                        'type'    => 'switch',
                        'options' => array(
                            'on' 	=> esc_html__( 'Enable', 'opalestate-pro' ),
                            'off'   => esc_html__( 'Disable', 'opalestate-pro' ),
                        ),
                        'default' => 'off',
                    ),

					array(
						'id'      		=> 'approve_email_subject',
						'name'    		=> esc_html__( 'Email Subject', 'opalestate-pro' ),
						'type'    		=> 'text',
						'desc'			=> esc_html__( 'The email subject a user should receive when they make an initial property request.', 'opalestate-pro' ),
						'attributes'  	=> array(
	        									'placeholder' 		=> 'Your property at I Love WordPress is pending',get_bloginfo( 'name' ),
	        									'rows'       	 	=> 3,
	    									),
						'default'	=> esc_html__( 'New Property Listing Submitted: {property_name}', 'opalestate-pro' )
					),

					array(
						'id'      	=> 'approve_email_body',
						'name'    	=> esc_html__( 'Email Body', 'opalestate-pro' ),
						'type'    	=> 'wysiwyg',
						'desc'		=> esc_html__( 'Enter the email a user should receive when they make an initial payment request.', 'opalestate-pro' ),
						'default' 	=> OpalEstate_Send_Email_Approve::get_default_template(),
					),	

					/// email contact template ////
					array(
						'name' => esc_html__( 'Email Contact Templates (Template Tags)', 'opalestate-pro' ),
						'desc' => $contact_list_tags.'<br><hr>',
						'id'   => 'opalestate_title_email_settings_6',
						'type' => 'title'
					),

					array(
						'id'      		=> 'contact_email_subject',
						'name'    		=> esc_html__( 'Email Subject', 'opalestate-pro' ),
						'type'    		=> 'text',
						'desc'			=> esc_html__( 'The email subject a user should receive when they make an initial property request.', 'opalestate-pro' ),
						'attributes'  	=> array(
	        									'placeholder' 		=> 'Your property at I Love WordPress is pending',get_bloginfo( 'name' ),
	        									'rows'       	 	=> 3,
	    									),
						'default'	=> esc_html__('You got a message', 'opalestate-pro') 
					),

					array(
						'id'      	=> 'contact_email_body',
						'name'    	=> esc_html__( 'Email Body', 'opalestate-pro' ),
						'type'    	=> 'wysiwyg',
						'desc'		=>  trim(preg_replace('/\t+/', '', "Hi {receive_name},<br>
							You have got message from {name} with email {email}. Here is detail:
						 <br>
						<br>
						{message}
						<br>
						&nbsp;<br>
						<br>
						<em>This message was sent by {site_link} on {current_time}.</em>"))
					)
				)
			)
		);

		return $fields;
	}

	/**
	 * get data of newrequest email
	 *
	 * @var $args  array: property_id , $body 
	 * @return text: message
	 */
	public static function replace_shortcode( $args, $body ) {

		$tags =  array(
			'user_name' 	=> "",
			'user_mail' 	=> "",
			'submitted_date' => "",
			'property_name' => "",
			'site_name' => '',
			'site_link'	=> '',
			'property_link' => '',
		);
		$tags = array_merge( $tags, $args );

		extract( $tags );

		$tags 	 = array( "{user_mail}",
						  "{user_name}",
						  "{submitted_date}",
						  "{site_name}",
						  "{site_link}",
						  "{current_time}",
						  '{property_name}',
						  '{property_link}');

		$values  = array(   $user_mail, 
							$user_name ,
							$submitted_date ,
							get_bloginfo( 'name' ) ,
							get_home_url(), 
							date("F j, Y, g:i a"),
							$property_name,
							$property_link
		);

		$message = str_replace($tags, $values, $body);

		return $message;
	}
 
	public static function approve_publish_property_email( $post_id ) {

        $mail = new OpalEstate_Send_Email_Approve();
		$mail->set_pros( $post_id );

		$return =  self::send_mail_now( $mail );

		echo json_encode( $return ); die();
    }

}

Opalestate_Emails::init();