<?php
/**
 * Định dạng hiển thị admin (ngày, nhãn trạng thái, loại giá).
 *
 * @package DatvetaucaotocBooking
 */

declare(strict_types=1);

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

final class Datvetau_Booking_Admin_Format {

	/** DB / ISO Y-m-d → dd/mm/yyyy */
	public static function date_to_display( string $value ): string {
		$value = trim( $value );
		if ( preg_match( '/^(\d{4})-(\d{2})-(\d{2})$/', $value, $m ) ) {
			return $m[3] . '/' . $m[2] . '/' . $m[1];
		}
		if ( preg_match( '/^(\d{2})-(\d{2})-(\d{4})$/', $value, $m ) ) {
			return $m[1] . '/' . $m[2] . '/' . $m[3];
		}
		return $value;
	}

	/** Form admin (dd/mm/yyyy, dd-mm-yyyy, yyyy-mm-dd) → Y-m-d */
	public static function date_to_storage( string $value ): ?string {
		$value = trim( $value );
		if ( preg_match( '/^(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})$/', $value, $m ) ) {
			$day   = (int) $m[1];
			$month = (int) $m[2];
			$year  = (int) $m[3];
			if ( checkdate( $month, $day, $year ) ) {
				return sprintf( '%04d-%02d-%02d', $year, $month, $day );
			}
			return null;
		}
		if ( preg_match( '/^(\d{4})-(\d{2})-(\d{2})$/', $value ) ) {
			return $value;
		}
		return null;
	}

	public static function booking_status_label( string $status ): string {
		$labels = array(
			'pending_payment' => __( 'Chờ thanh toán', 'datvetaucaotoc-booking' ),
			'confirmed'       => __( 'Đã thanh toán', 'datvetaucaotoc-booking' ),
			'cancelled'       => __( 'Đã hủy', 'datvetaucaotoc-booking' ),
		);
		return $labels[ $status ] ?? $status;
	}

	public static function trip_status_label( string $status ): string {
		$labels = array(
			'active'    => __( 'Đang bán', 'datvetaucaotoc-booking' ),
			'cancelled' => __( 'Hủy chuyến', 'datvetaucaotoc-booking' ),
		);
		return $labels[ $status ] ?? $status;
	}

	public static function fare_category_label( string $category ): string {
		$labels = array(
			'adult'  => __( 'Người lớn', 'datvetaucaotoc-booking' ),
			'child'  => __( 'Trẻ em', 'datvetaucaotoc-booking' ),
			'senior' => __( 'Người cao tuổi', 'datvetaucaotoc-booking' ),
		);
		return $labels[ $category ] ?? $category;
	}

	public static function trip_type_label( string $trip_type ): string {
		return 'round-trip' === $trip_type || 'round_trip' === $trip_type
			? __( 'Khứ hồi', 'datvetaucaotoc-booking' )
			: __( 'Một chiều', 'datvetaucaotoc-booking' );
	}

	/** @return array<int,string> Tháng 1–12 */
	public static function vietnamese_month_labels(): array {
		return array(
			1  => __( 'Tháng 1', 'datvetaucaotoc-booking' ),
			2  => __( 'Tháng 2', 'datvetaucaotoc-booking' ),
			3  => __( 'Tháng 3', 'datvetaucaotoc-booking' ),
			4  => __( 'Tháng 4', 'datvetaucaotoc-booking' ),
			5  => __( 'Tháng 5', 'datvetaucaotoc-booking' ),
			6  => __( 'Tháng 6', 'datvetaucaotoc-booking' ),
			7  => __( 'Tháng 7', 'datvetaucaotoc-booking' ),
			8  => __( 'Tháng 8', 'datvetaucaotoc-booking' ),
			9  => __( 'Tháng 9', 'datvetaucaotoc-booking' ),
			10 => __( 'Tháng 10', 'datvetaucaotoc-booking' ),
			11 => __( 'Tháng 11', 'datvetaucaotoc-booking' ),
			12 => __( 'Tháng 12', 'datvetaucaotoc-booking' ),
		);
	}
}
