<?php

namespace WPD_Platform\Integrations\WPTravelEngine\Actions;

use Dollie\SDK\Attributes\Action;
use Dollie\SDK\Base\AutomateAction;
use Dollie\SDK\Traits\SingletonLoader;

#[Action(
    id: 'wte_list_trips',
    label: 'List Trips',
    since: '1.0.0'
)]
/**
 * ListTrips.
 * php version 5.6
 *
 * @category ListTrips
 * @author   BSF <username@example.com>
 * @license  https://www.gnu.org/licenses/gpl-3.0.html GPLv3
 * @link     https://www.brainstormforce.com/
 * @since    1.0.0
 */
/**
 * ListTrips.
 *
 * @category ListTrips
 * @author   BSF <username@example.com>
 * @license  https://www.gnu.org/licenses/gpl-3.0.html GPLv3
 * @link     https://www.brainstormforce.com/
 * @since    1.0.0
 */
class ListTrips extends AutomateAction
{
    use SingletonLoader;

    /**
     * Integration type.
     *
     * @var string
     */
    public $integration = 'WPTravelEngine';

    /**
     * Action name.
     *
     * @var string
     */
    public $action = 'wte_list_trips';

    /**
     * Register the action.
     *
     * @param array $actions List of registered actions.
     * @return array Modified list of actions.
     */
    public function register($actions)
    {
        $actions[$this->integration][$this->action] = [
            'label' => __('List Trips', 'dollie'),
            'description' => __('Get a list of trips with optional filtering', 'dollie'),
            'action' => $this->action,
            'function' => [$this, '_action_listener'],
        ];

        return $actions;
    }

    /**
     * Action listener that returns list of trips.
     *
     * @param int   $user_id          User ID.
     * @param int   $automation_id    Automation ID.
     * @param array $fields           Trigger fields.
     * @param array $selected_options Selected options for trip filtering.
     * @return array Result with status and data or error.
     */
    public function _action_listener($user_id, $automation_id, $fields, $selected_options)
    {
        if (! function_exists('wp_travel_engine_get_settings')) {
            return [
                'status' => 'error',
                'message' => __('WP Travel Engine plugin is not active.', 'dollie'),

            ];
        }
        $limit = ! empty($selected_options['limit']) ? intval($selected_options['limit']) : 20;

        $args = [
            'post_type' => 'trip',
            'post_status' => isset($selected_options['status']) ? $selected_options['status'] : 'publish',
            'posts_per_page' => $limit,
        ];


        $trips_query = new \WP_Query($args);
        $trips = [];

        if ($trips_query->have_posts()) {
            while ($trips_query->have_posts()) {
                $trips_query->the_post();
                $trip_id = get_the_ID();

                if (! $trip_id) {
                    continue;
                }

                $trip_settings_raw = get_post_meta($trip_id, 'wp_travel_engine_setting', true);
                $trip_settings = is_array($trip_settings_raw) ? $trip_settings_raw : [];

                $price = isset($trip_settings['trip_price']) ? floatval($trip_settings['trip_price']) : 0;
                $sale_price = isset($trip_settings['sale_price']) ? floatval($trip_settings['sale_price']) : 0;
                $duration = isset($trip_settings['trip_duration']) ? $trip_settings['trip_duration'] : '';
                $duration_unit = isset($trip_settings['trip_duration_unit']) ? $trip_settings['trip_duration_unit'] : 'days';

                $featured_image = get_the_post_thumbnail_url($trip_id, 'medium');

                $categories = [];
                $terms = get_the_terms($trip_id, 'trip_types');
                if (! empty($terms) && ! is_wp_error($terms)) {
                    foreach ($terms as $term) {
                        $categories[] = [
                            'id' => $term->term_id,
                            'name' => $term->name,
                            'slug' => $term->slug,
                        ];
                    }
                }

                $trips[] = [
                    'id' => $trip_id,
                    'title' => get_the_title(),
                    'url' => get_permalink(),
                    'featured_image' => $featured_image,
                    'price' => $price,
                    'sale_price' => $sale_price,
                    'duration' => trim($duration . ' ' . $duration_unit),
                    'categories' => $categories,
                    'excerpt' => get_the_excerpt(),
                    'date_created' => get_the_date('Y-m-d H:i:s'),
                ];
            }
            wp_reset_postdata();
        }

        return [
            'status' => 'success',
            'data' => [
                'trips' => $trips,
                'count' => count($trips),
            ],
        ];
    }
}

ListTrips::get_instance();
