<?php
/**
 * @brief		ACP Export Personal Information
 * @since		15 May 2018
 */

namespace IPS\nexus\extensions\core\MemberExportPersonalInformation;

/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
	header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
	exit;
}

/**
 * @brief	ACP Export Personal Information
 */
class _Customer
{
	/**
	 * Return data
	 * @param	\IPS\Member		$member		The member
	 *
	 * @return	array
	 */
	public function getData( \IPS\Member $member )
	{
		$return = array();
		
		try
		{
			$customer = \IPS\nexus\Customer::load( $member->member_id );
			
			/* Name and addresses */
			$return['customer'] = array(
				'first_name' => $customer->cm_first_name,
				'last_name'  => $customer->cm_last_name
			);
			
			foreach( \IPS\Db::i()->select( '*', 'nexus_customer_addresses', array( '`member`=?', $member->member_id ) ) as $address )
			{
				$return['addresses'][] = \IPS\GeoLocation::buildFromJson( $address['address'] )->toString( "," );
			}
			
			/* Customer custom fields */
			foreach ( \IPS\nexus\Customer\CustomField::roots() as $field )
			{
				$column = $field->column;
				if ( $column )
				{
					$return['fields'][ $column ] = $field->displayValue( $customer->$column, TRUE );
				}
			}
			
			/* Credit cards */
			foreach ( new \IPS\Patterns\ActiveRecordIterator( \IPS\Db::i()->select( '*', 'nexus_customer_cards', array( 'card_member=?', $member->member_id ) ), 'IPS\nexus\Customer\CreditCard' ) as $card )
			{
				try
				{
					$cardData = $card->card;
					$return['credit_cards'][ $card->id ] = array(
						'card_type'		=> $cardData->type,
						'card_number'	=> $cardData->lastFour,
						'card_expire'	=> ( !\is_null( $cardData->expMonth ) AND !\is_null( $cardData->expYear ) ) ? str_pad( $cardData->expMonth , 2, '0', STR_PAD_LEFT ). '/' . $cardData->expYear : NULL
					);
				}
				catch ( \Exception $e ) {}
			}
		}
		catch( \OutOfRangeException $ex )
		{
			
		}
		
		return $return;
	}
	
}