guard_admin(); if ( $check ) { return $check; } if ( null !== $type && ! in_array( $type, self::ALLOWED_TYPES, true ) ) { return [ 'error' => "Invalid type '{$type}'. Accepted values: " . implode( ', ', self::ALLOWED_TYPES ) . '.' ]; } try { $query = $this->clamp_pagination( $per_page, $paged ); if ( null !== $type ) { $query['type'] = $type; } $request = $this->build_request( 'GET', '/timetics/v1/appointments', $query ); if ( is_array( $request ) ) { return $request; } $controller = \Timetics\Core\Appointments\Api_Appointment::instance(); $data = $this->extract_response( $controller->get_items( $request ), 'Failed to list meetings.' ); if ( isset( $data['error'] ) ) { return $data; } $items = $this->list_items( $data ); return [ 'total' => $data['total'] ?? count( $items ), 'per_page' => $query['per_page'], 'paged' => $query['paged'], 'meetings' => $this->shape_rows( $items, fn( $item ) => $this->shape_meeting( $item ) ), ]; } catch ( \Throwable $e ) { Log::error( 'Timetics_List_Meetings_Tool error', [ 'error' => $e->getMessage() ] ); return [ 'error' => 'Failed to list meetings: ' . $e->getMessage() ]; } } }