guard_admin(); if ( $check ) { return $check; } $start_date = trim( $start_date ); $end_date = trim( $end_date ); if ( '' === $start_date || '' === $end_date ) { return [ 'error' => 'Both start_date and end_date are required (YYYY-MM-DD).' ]; } $requested = $this->resolve_metrics( $metrics ); if ( empty( $requested ) ) { return [ 'error' => 'No valid metrics requested. Accepted: ' . implode( ', ', self::METRICS ) . '.' ]; } try { $body = []; foreach ( $requested as $metric ) { $body[] = [ 'report' => $metric, 'start_date' => sanitize_text_field( $start_date ), 'end_date' => sanitize_text_field( $end_date ), ]; } $request = $this->build_request( 'POST', '/timetics/v1/reports/overview', [], $body ); if ( is_array( $request ) ) { return $request; } $controller = \Timetics\Core\Reports\Api_Report::instance(); $data = $this->extract_response( $controller->get_overview( $request ), 'Failed to get reports overview.' ); if ( isset( $data['error'] ) ) { return $data; } return [ 'start_date' => $start_date, 'end_date' => $end_date, 'reports' => $data, ]; } catch ( \Throwable $e ) { Log::error( 'Timetics_Get_Reports_Tool error', [ 'error' => $e->getMessage() ] ); return [ 'error' => 'Failed to get reports overview: ' . $e->getMessage() ]; } } private function resolve_metrics( ?array $metrics ): array { if ( null === $metrics || [] === $metrics ) { return self::DEFAULT_METRICS; } return array_values( array_intersect( self::METRICS, array_map( 'strval', $metrics ) ) ); } }