<?php
/**
 * Location/Address Management Service
 *
 * Manages business locations and address information for schema.org markup.
 *
 * @package BW_Schema
 * @since 3.0.0-babel
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

class BW_Schema_Location {

	/**
	 * Get address field definitions for form builder
	 *
	 * @return array Field definitions for address section
	 */
	public static function get_field_definitions() {
		return array(
			// Location info
			array(
				'section'   => 'location_address',
				'name'      => 'location_name',
				'label'     => __( 'Location Name', 'bw-schema' ),
				'type'      => 'text',
				'help'      => __( 'e.g., "Main Office", "Downtown Store", "Headquarters". Leave blank for single location.', 'bw-schema' ),
				'sanitize'  => 'sanitize_text_field',
			),
			array(
				'section'   => 'location_address',
				'name'      => 'address_street',
				'label'     => __( 'Street Address', 'bw-schema' ),
				'type'      => 'text',
				'help'      => __( 'e.g., "123 Main Street, Suite 100"', 'bw-schema' ),
				'sanitize'  => 'sanitize_text_field',
			),
			array(
				'section'   => 'location_address',
				'name'      => 'address_city',
				'label'     => __( 'City', 'bw-schema' ),
				'type'      => 'text',
				'help'      => __( 'e.g., "San Francisco"', 'bw-schema' ),
				'sanitize'  => 'sanitize_text_field',
			),
			array(
				'section'   => 'location_address',
				'name'      => 'address_state',
				'label'     => __( 'State/Province', 'bw-schema' ),
				'type'      => 'text',
				'help'      => __( 'e.g., "CA" or "California"', 'bw-schema' ),
				'sanitize'  => 'sanitize_text_field',
			),
			array(
				'section'   => 'location_address',
				'name'      => 'address_zip',
				'label'     => __( 'ZIP/Postal Code', 'bw-schema' ),
				'type'      => 'text',
				'help'      => __( 'e.g., "94105"', 'bw-schema' ),
				'sanitize'  => 'sanitize_text_field',
			),
			array(
				'section'   => 'location_address',
				'name'      => 'address_country',
				'label'     => __( 'Country', 'bw-schema' ),
				'type'      => 'text',
				'help'      => __( 'e.g., "US" or "United States" (default: US)', 'bw-schema' ),
				'sanitize'  => 'sanitize_text_field',
			),
		);
	}

	/**
	 * Format address for schema.org PostalAddress
	 *
	 * @param array $org_data Organization data
	 * @return array PostalAddress schema or empty array
	 */
	public static function format_for_schema( $org_data ) {
		if ( empty( $org_data['address_street'] ) || empty( $org_data['address_city'] ) ) {
			return array();
		}

		return array(
			'@type'           => 'PostalAddress',
			'streetAddress'   => $org_data['address_street'] ?? '',
			'addressLocality' => $org_data['address_city'] ?? '',
			'addressRegion'   => $org_data['address_state'] ?? '',
			'postalCode'      => $org_data['address_zip'] ?? '',
			'addressCountry'  => $org_data['address_country'] ?? 'US',
		);
	}

	/**
	 * Get formatted address as string
	 *
	 * @param array $org_data Organization data
	 * @return string Formatted address
	 */
	public static function format_as_string( $org_data ) {
		$parts = array();

		if ( ! empty( $org_data['address_street'] ) ) {
			$parts[] = $org_data['address_street'];
		}

		if ( ! empty( $org_data['address_city'] ) ) {
			$parts[] = $org_data['address_city'];
		}

		if ( ! empty( $org_data['address_state'] ) ) {
			$parts[] = $org_data['address_state'];
		}

		if ( ! empty( $org_data['address_zip'] ) ) {
			$parts[] = $org_data['address_zip'];
		}

		return implode( ', ', $parts );
	}
}
