'date', 'competition' => 'array', 'participants' => 'array', 'media' => 'array', 'officials' => 'array', 'venue' => 'array', 'result' => 'array', 'segments' => 'array', 'statistics' => 'array', 'reviews' => 'array', ]; /** * Shape the record into exactly what the match page header renders. Every value * is null-safe so a video with no/partial match data degrades to just its title * instead of falling back to hard-coded demo content. */ public function headerData(): array { $p = $this->participants ?? []; $c = $this->competition ?? []; $v = $this->venue ?? []; return [ 'blue' => [ 'name' => $this->participant1_name ?: null, 'club' => $p['p1_club'] ?? null, 'flag' => $this->flagFor($p['p1_country'] ?? null), ], 'red' => [ 'name' => $this->participant2_name ?: null, 'club' => $p['p2_club'] ?? null, 'flag' => $this->flagFor($p['p2_country'] ?? null), ], 'weight_category' => $p['weight_class'] ?? null, 'championship' => $c['championship_name'] ?? ($this->event_name ?: null), 'match_number' => $c['match_number'] ?? null, 'court' => $c['court'] ?? null, 'referee' => [ 'name' => $this->referee_name ?: null, 'flag' => $this->flagFor($p['referee_country'] ?? null), ], 'venue' => [ 'name' => $this->venue_name ?: ($v['name'] ?? null), 'map_link' => $v['map_link'] ?? null, ], 'event_logo' => $this->media['event_poster'] ?? null, // rel path or null ]; } /** Resolve a country name or ISO2 code to a lowercase flag-icons code (or null). */ private function flagFor(?string $country): ?string { $country = trim((string) $country); if ($country === '') { return null; } $countries = \App\Data\Countries::all(); if (preg_match('/^[A-Za-z]{2}$/', $country) && isset($countries[strtoupper($country)])) { return strtolower($country); } foreach ($countries as $iso2 => $meta) { if (strcasecmp($meta['name'], $country) === 0) { return strtolower($iso2); } } return null; } public function video(): BelongsTo { return $this->belongsTo(Video::class); } public function user(): BelongsTo { return $this->belongsTo(User::class); } public function isDraft(): bool { return $this->status === 'draft'; } }