<?php // phpcs:ignore Squiz.Commenting.FileComment.Missing
namespace Automattic\JetpackCRM;

defined( 'ZEROBSCRM_PATH' ) || exit( 0 );

/**
 * Invoices endpoint
 */
class Invoices_Endpoint extends Client_Portal_Endpoint {

	public static function register_endpoint( $endpoints, $client_portal ) {
		if ( zeroBSCRM_getSetting( 'feat_invs' ) > 0 ) {
			$new_endpoint = new Invoices_Endpoint( $client_portal );

			$new_endpoint->portal               = $client_portal;
			$new_endpoint->slug                 = $client_portal->get_endpoint( ZBS_TYPE_INVOICE );
			$new_endpoint->name                 = __( 'Invoices', 'zero-bs-crm' );
			$new_endpoint->hide_from_menu       = false;
			$new_endpoint->menu_order           = 2;
			$new_endpoint->icon                 = 'fa-file-text-o';
			$new_endpoint->add_rewrite_endpoint = true;

			$endpoints[] = $new_endpoint;
		}

		return $endpoints;
	}

	// Handle dual-mode endpoint properties invoices vs. single invoice
	public function before_endpoint_actions() {

		// We should call invoices if no param is given, single invoice otherwise
		if ( empty( $this->param_value ) ) {
			$this->template_name                = 'invoices.php';
			$this->should_check_user_permission = true;
		} else {
			global $zbs;

			$this->template_name                = 'single-invoice.php';
			$this->should_check_user_permission = $zbs->settings->get( 'easyaccesslinks' ) === 0;
		}

	}

	/**
	 * Single Endpoint rendering function
	 */
	function single_invoice_html_output( $invoice_id = -1, $invoice_hash = '' ) {
		echo zeroBSCRM_invoice_generatePortalInvoiceHTML( $invoice_id, $invoice_hash  );
	}

	#} New functions here. Used as NAMED in WooSync. Please do not rename and not tell me as need to update WooSync if so
	#} 1. The invoice list function 
	/**
	* 
	* @param $link and $endpoint as they will differ between Portal and WooCommerce My Account
	* 
	*/
	function list_invoices_html_output($link = '', $endpoint = ''){
		global $wpdb;

		$uid = get_current_user_id();
		$uinfo = get_userdata( $uid );
		$cID = zeroBS_getCustomerIDWithEmail($uinfo->user_email);
		$is_invoice_admin = $uinfo->has_cap( 'admin_zerobs_invoices' );

		// if the current is a valid contact or a WP user with permissions to view invoices...
		if( $cID > 0 || $is_invoice_admin ){

			// this allows the current admin to see all invoices even if they're a contact
			if ( $is_invoice_admin ) {
				$cID = -1;
				$this->portal->render->portal_viewing_as_admin_banner( __( 'Admins will see all invoices below, but clients will only see invoices assigned to them.', 'zero-bs-crm' ) );
			}

			// get invoices
			$customer_invoices = zeroBS_getInvoicesForCustomer($cID,true,100,0,false);

			// if there are more than zero invoices...
			if(count($customer_invoices) > 0){

				global $zbs;
				?><?php

				// capture output buffer: this isn't ideal but since other extensions modify this table with existing hooks, it's the best we can do.
				ob_start();
				foreach($customer_invoices as $cinv){

					//invstatus check
					$inv_status = $cinv['status'];

					// id
					$idStr = '#'.$cinv['id'];
					if (isset($cinv['id_override']) && !empty($cinv['id_override'])) $idStr = $cinv['id_override'];

					// skip drafts if not an admin with invoice access
					if ( $inv_status === 'Draft' && ! $is_invoice_admin ) { // phpcs:ignore Generic.WhiteSpace.ScopeIndent.IncorrectExact
						continue;
					}

					if (!isset($cinv['due_date']) || empty($cinv['due_date']) || $cinv['due_date'] == -1)
						//no due date;
						$due_date_str = __("No due date", "zero-bs-crm");
					else
						$due_date_str = $cinv['due_date_date'];
					
					// view on portal (hashed?)
					$invoiceURL = zeroBSCRM_portal_linkObj($cinv['id'],ZBS_TYPE_INVOICE); //zeroBS_portal_link('invoices',$invoiceID);

					$idLinkStart = ''; $idLinkEnd = '';
					if (!empty($invoiceURL)){
						$idLinkStart = '<a href="'. $invoiceURL .'">'; $idLinkEnd = '</a>';
					}

					echo '<tr>';
						echo '<td data-title="' . esc_attr( $zbs->settings->get('reflabel') ) . '">'. $idLinkStart . esc_html( $idStr ) . ' '. esc_html__('(view)', 'zero-bs-crm') . $idLinkEnd.'</td>';
						echo '<td data-title="' . esc_attr__('Date',"zero-bs-crm") . '">' . esc_html( $cinv['date_date'] ) . '</td>';
						echo '<td data-title="' . esc_attr__('Due date',"zero-bs-crm") . '">' . esc_html( $due_date_str ) . '</td>';
						echo '<td data-title="' . esc_attr__('Total',"zero-bs-crm") . '">' . esc_html( zeroBSCRM_formatCurrency($cinv['total']) ) . '</td>';
						echo '<td data-title="' . esc_attr__('Status',"zero-bs-crm") . '"><span class="status '. esc_attr( $inv_status ) .'">' . esc_html( $cinv['status'] ) . '</span></td>';

						do_action('zbs-extra-invoice-body-table', $cinv['id']);

					//	echo '<td class="tools"><a href="account/invoices/274119/pdf" class="pdf_download" target="_blank"><i class="fa fa-file-pdf-o"></i></a></td>';
					echo '</tr>';
				}
				$invoices_to_show = ob_get_contents();
				ob_end_clean();

				if ( !empty( $invoices_to_show ) ) {
					// there are invoices to show to this user, so build table
					echo '<table class="table zbs-invoice-list">';
						echo '<thead>';
							echo '<th>' . esc_html( $zbs->settings->get('reflabel') ) . '</th>';
							echo '<th>' . esc_html__('Date','zero-bs-crm') . '</th>';
							echo '<th>' . esc_html__('Due date','zero-bs-crm') . '</th>';
							echo '<th>' . esc_html__('Total','zero-bs-crm') . '</th>';
							echo '<th>' . esc_html__('Status','zero-bs-crm') . '</th>';
							do_action('zbs-extra-invoice-header-table');
						echo '</thead>';
						echo $invoices_to_show;
					echo '</table>';
				}
				else {
					// no invoices to show...might have drafts but no admin perms
					esc_html_e( 'You do not have any invoices yet.', 'zero-bs-crm' );
				}
			}else{
				// invoice object count for current user is 0
				esc_html_e( 'You do not have any invoices yet.', 'zero-bs-crm' );
			}
		}else{
			// not a valid contact or invoice admin user
			esc_html_e( 'You do not have any invoices yet.', 'zero-bs-crm' );
		}
	} 
}