<?php

namespace AutomateWoo;

/**
 * @class Admin_Data_Layer_Formatter
 */
class Admin_Data_Layer_Formatter {


	/**
	 * @param Data_Layer $data_layer
	 * @return array
	 */
	public static function format( $data_layer ) {

		$data           = $data_layer->get_raw_data();
		$formatted_data = [];

		foreach ( $data as $data_type => $data_item ) {

			if ( ! $data_item ) {
				$formatted_data[] = [
					'title' => self::get_data_type_title( $data_type ),
					'value' => __( 'Missing', 'automatewoo' ),
				];
				continue;
			}

			switch ( $data_type ) {

				case 'order':
					if ( ! $data_item->get_id() ) {
						break;
					}
					/** @var \WC_Order $data_item */
					$formatted_data[] = [
						'title' => __( 'Order', 'automatewoo' ),
						'value' => Format::html_id_link(
							$data_item->get_edit_order_url(),
							$data_item->get_id()
						),
					];
					break;

				case 'customer':
					$formatted_data[] = [
						'title' => __( 'Customer', 'automatewoo' ),
						'value' => Format::customer( $data_item ),
					];
					break;

				case 'guest':
					/** @var $data_item Guest */
					$formatted_data[] = [
						'title' => __( 'Guest', 'automatewoo' ),
						'value' => Format::email( $data_item->get_email() ),
					];
					break;

				case 'cart':
					/** @var $data_item Cart */
					$formatted_data[] = [
						'title' => __( 'Cart', 'automatewoo' ),
						'value' => '#' . $data_item->get_id(),
					];
					break;

				case 'review':
					/** @var $data_item Review */
					$formatted_data[] = [
						'title' => __( 'Review', 'automatewoo' ),
						'value' => Format::html_id_link(
							get_edit_comment_link( $data_item->get_id() ),
							$data_item->get_id()
						),
					];
					break;

				case 'product':
					/** @var $data_item \WC_Product */
					$formatted_data[] = [
						'title' => __( 'Product', 'automatewoo' ),
						'value' => Format::html_link(
							get_edit_post_link( $data_item->get_id() ),
							$data_item->get_title()
						),
					];
					break;

				case 'subscription':
					/** @var $data_item \WC_Subscription */
					$formatted_data[] = [
						'title' => __( 'Subscription', 'automatewoo' ),
						'value' => Format::html_id_link(
							$data_item->get_edit_order_url(),
							$data_item->get_id()
						),
					];
					break;

				case 'booking':
					/** @var $data_item \WC_Booking */
					$formatted_data[] = [
						'title' => __( 'Booking', 'automatewoo' ),
						'value' => Format::html_id_link(
							(string) get_edit_post_link( $data_item->get_id() ),
							$data_item->get_id()
						),
					];
					break;

				case 'membership':
					/** @var $data_item \WC_Memberships_User_Membership */
					$formatted_data[] = [
						'title' => __( 'Membership', 'automatewoo' ),
						'value' => Format::html_id_link(
							get_edit_post_link( $data_item->id ),
							$data_item->id
						),
					];
					break;

				case 'wishlist':
					$formatted_data[] = [
						'title' => __( 'Wishlist', 'automatewoo' ),
						'value' => '#' . $data_item->id,
					];
					break;

				case 'course':
					/** @var $data_item \WP_Post */
					$link             = get_edit_post_link( $data_item->ID );
					$formatted_data[] = [
						'title' => __( 'Course', 'automatewoo' ),
						'value' => '<a href="' . esc_url( $link ) . '">' . esc_html( $data_item->post_title ) . '</a>',
					];
					break;

				case 'lesson':
					/** @var $data_item \WP_Post */
					$link             = get_edit_post_link( $data_item->ID );
					$formatted_data[] = [
						'title' => __( 'Lesson', 'automatewoo' ),
						'value' => '<a href="' . esc_url( $link ) . '">' . esc_html( $data_item->post_title ) . '</a>',
					];
					break;

				case 'group':
					/** @var $data_item \WP_Post */
					$link             = add_query_arg(
						array(
							'view'     => 'group_students',
							'page'     => 'student_groups',
							'group_id' => $data_item->ID,
						),
						admin_url( 'admin.php' )
					);
					$formatted_data[] = [
						'title' => __( 'Group', 'automatewoo' ),
						'value' => '<a href="' . esc_url( $link ) . '">' . esc_html( $data_item->post_title ) . '</a>',
					];
					break;

				case 'teacher':
					/** @var $data_item \WP_User */
					$link             = get_edit_user_link( $data_item->ID );
					$formatted_data[] = [
						'title' => __( 'Teacher', 'automatewoo' ),
						'value' => '<a href="' . esc_url( $link ) . '">' . esc_html( aw_get_full_name( $data_item ) ) . '</a>' . Format::email( $data_item->user_email ),
					];
					break;
			}
		}

		return apply_filters( 'automatewoo/formatted_data_layer', $formatted_data, $data_layer );
	}

	/**
	 * Get a display title for a data type.
	 *
	 * @param string $data_type Data type ID.
	 *
	 * @return string
	 */
	private static function get_data_type_title( $data_type ) {
		$titles = [
			'booking'      => __( 'Booking', 'automatewoo' ),
			'cart'         => __( 'Cart', 'automatewoo' ),
			'course'       => __( 'Course', 'automatewoo' ),
			'customer'     => __( 'Customer', 'automatewoo' ),
			'group'        => __( 'Group', 'automatewoo' ),
			'guest'        => __( 'Guest', 'automatewoo' ),
			'lesson'       => __( 'Lesson', 'automatewoo' ),
			'membership'   => __( 'Membership', 'automatewoo' ),
			'order'        => __( 'Order', 'automatewoo' ),
			'product'      => __( 'Product', 'automatewoo' ),
			'review'       => __( 'Review', 'automatewoo' ),
			'subscription' => __( 'Subscription', 'automatewoo' ),
			'teacher'      => __( 'Teacher', 'automatewoo' ),
			'wishlist'     => __( 'Wishlist', 'automatewoo' ),
		];

		if ( isset( $titles[ $data_type ] ) ) {
			return $titles[ $data_type ];
		}

		return ucwords( str_replace( [ '-', '_' ], ' ', $data_type ) );
	}
}
