<?php
/** Cron
 *
 * @package BW-Mailchimp
 */

namespace BwMailchimp;

if ( ! class_exists( __NAMESPACE__ . '\Cron' ) ) {

	require_once plugin_dir_path( PLUGIN_PATH ) . 'includes/class-options.php';

	/**
	 * Cron tasks.
	 */
	class Cron {

		public static function check_connection () {
			$options = Options::get_options();

			$mailchimp_api_key = $options['mailchimp_api_key'];
			$mailchimp_server = $options['mailchimp_server'];
			$mailchimp_list_id = $options['mailchimp_list_id'];

			$response = wp_remote_request(
				"https://{$mailchimp_server}.api.mailchimp.com/3.0//lists/{$mailchimp_list_id}/members",
				array(
					'method' => 'GET',
					'headers' => array(
						'Authorization' => 'Basic ' . base64_encode( 'anystring:' . $mailchimp_api_key )
					)
				)
			);

			if ( is_wp_error( $response ) ) {
				var_dump( $response->get_error_message() );
				error_log( $response->get_error_message() );
				return false;
			}

			if ( $response['response']['code'] != 200 && $response['response']['code'] != 201 ) {
				var_dump( $response['response']['message'] );
				error_log( $response['response']['message'] );
				return false;
			}

			return true;
		}

		public static function add_members_lists () {
			$options = Options::get_options();

			$sites = array(
				'palms',
				'sands',
				'shoreclub'
			);

			
			if ( ! self::check_connection() ) {
				return;
			}

			foreach ( $sites as $site ) {

				$last_uploaded = $options['last_csv_' . $site];

				$directory = plugin_dir_path( PLUGIN_PATH ) . '../../../opera/' . $site;

				$files = array_filter(
					scandir( $directory ),
					function ( $filename ) use ( $last_uploaded ) {
						if ( preg_match( '/^\d{4}\-\d{2}\-\d{2}\.csv$/', $filename ) ) {
							return $filename > $last_uploaded;
						}
						return false;
					}
				);

				sort( $files );

				foreach ( $files as $file ) {
					self::csv_import( $directory . '/' . $file );
					Options::update_option('last_csv_' . $site, $file);
				}
			}
		}

		public static function csv_import ( $filename ) {
			$options = Options::get_options();

			$mailchimp_api_key = $options['mailchimp_api_key'];
			$mailchimp_server = $options['mailchimp_server'];
			$mailchimp_list_id = $options['mailchimp_list_id'];


			$handle = fopen( $filename, 'r' );

			if ( ( $heading = fgetcsv( $handle ) ) !== false ) {
				while ( ( $data = fgetcsv( $handle ) ) !== false ) {
					$row = array_combine( $heading, $data );

					// required
					$member = array(
						'email_address' => $row['Email Address'],
						'status' => 'subscribed',
						'merge_fields' => array()
					);

					// merge_fields
					if ( ! empty( $row['First Name'] ) ) {
						$member['merge_fields']['FNAME'] = $row['First Name'];
					}
					if ( ! empty( $row['Last Name'] ) ) {
						$member['merge_fields']['LNAME'] = $row['Last Name'];
					}
					if ( ! empty( $row['Phone Number'] ) ) {
						$member['merge_fields']['PHONE'] = $row['Phone Number'];
					}
					if ( ! empty( $row['Title'] ) ) {
						$member['merge_fields']['TITLE'] = $row['Title'];
					}
					if ( ! empty( $row['City'] ) ) {
						$member['merge_fields']['CITY'] = $row['City'];
					}
					if ( ! empty( $row['State'] ) ) {
						$member['merge_fields']['STATE'] = $row['State'];
					}
					if ( ! empty( $row['Country'] ) ) {
						$member['merge_fields']['COUNTRY'] = $row['Country'];
					}
					if ( ! empty( $row['Resort'] ) ) {
						$member['merge_fields']['RESORT'] = $row['Resort'];
					}
					if ( ! empty( $row['Last Stay'] ) ) {
						$member['merge_fields']['LAST_STAY'] = $row['Last Stay'];
					}
					if ( ! empty( $row['Total Nights'] ) ) {
						$member['merge_fields']['TTL_NIGHTS'] = $row['Total Nights'];
					}
					if ( ! empty( $row['Total Stays'] ) ) {
						$member['merge_fields']['TTL_STAYS'] = $row['Total Stays'];
					}
					if ( ! empty( $row['Source'] ) ) {
						$member['merge_fields']['SOURCE'] = $row['Source'];
					}
					if ( ! empty( $row['Revenue'] ) ) {
						$member['merge_fields']['MMERGE13'] = $row['Revenue'];
					}

					if ( ! empty( $row['LATITUDE'] ) && ! empty( $row['LONGITUDE'] ) ) {
						$member['location'] = array(
							'latitude' => $row['LATITUDE'],
							'longitude' => $row['LONGITUDE']
						);
					}
					if ( ! empty( $row['OPTIN_IP'] ) ) {
						$member['ip_signup'] = $row['OPTIN_IP'];
					}
					if ( ! empty( $row['OPTIN_TIME'] ) ) {
						$member['timestamp_signup'] = $row['OPTIN_TIME'];
					}
					if ( ! empty( $row['OPTIN_IP'] ) ) {
						$member['ip_opt'] = $row['OPTIN_IP'];
					}
					if ( ! empty( $row['OPTIN_TIME'] ) ) {
						$member['timestamp_opt'] = $row['OPTIN_TIME'];
					}
					if ( ! empty( $row['TAGS'] ) ) {
						$member['tags'] = array_map(
							function ( $str ) {
								return trim( $str, '"' );
							},
							explode( ',', $row['TAGS'] )
						);
					}
					
					$subscriber_hash = md5( strtolower( $member['email_address'] ) );
					$response = wp_remote_request(
						"https://{$mailchimp_server}.api.mailchimp.com/3.0//lists/{$mailchimp_list_id}/members/{$subscriber_hash}",
						array(
							'method' => 'PUT',
							'headers' => array(
								'Authorization' => 'Basic ' . base64_encode( 'anystring:' . $mailchimp_api_key )
							),
							'body' => json_encode( $member )
						)
					);
				}
			}
		}
	}
}
