367 lines
22 KiB
PHP
367 lines
22 KiB
PHP
@extends('layouts.app')
|
|
|
|
@section('content')
|
|
<div class="container-fluid movie-page py-4">
|
|
<div class="row">
|
|
<!-- Main Content -->
|
|
<div class="col-lg-9">
|
|
<!-- Show Header -->
|
|
<div class="card mb-4">
|
|
<div class="card-body">
|
|
<div class="row">
|
|
<!-- Poster and Actions -->
|
|
<div class="col-md-3">
|
|
<div class="movie-poster mb-3">
|
|
<img src="http://image.tmdb.org/t/p/w342/{{ $show->poster_path }}"
|
|
alt="{{ $show->name }}"
|
|
class="img-fluid rounded shadow-sm"
|
|
title="{{ $show->name }} @if($show->first_air_date)({{ $show->first_air_date->format('Y') }})@endif">
|
|
</div>
|
|
|
|
<!-- Watch Providers -->
|
|
@if($show->watchProviders->isNotEmpty())
|
|
<div class="watch-providers mb-3">
|
|
<h6 class="text-muted mb-2">Available on:</h6>
|
|
<div class="d-flex flex-wrap gap-2">
|
|
@foreach($show->watchProviders as $watchProvider)
|
|
<img src="http://image.tmdb.org/t/p/w45/{{ $watchProvider->logo_path }}"
|
|
alt="{{ $watchProvider->provider_name }}"
|
|
title="{{ $watchProvider->provider_name }}"
|
|
class="rounded">
|
|
@endforeach
|
|
</div>
|
|
</div>
|
|
@endif
|
|
|
|
<!-- External Links -->
|
|
<div class="external-links mb-3">
|
|
<div class="d-flex gap-2">
|
|
@if($show->externalIds && $show->externalIds->tmdb_id)
|
|
<a href="https://www.themoviedb.org/tv/{{ $show->externalIds->tmdb_id }}" class="btn btn-sm btn-outline-secondary" target="_blank">
|
|
<img src="{{ asset('/img/tmdb.webp') }}" alt="TMDB" height="20">
|
|
</a>
|
|
@endif
|
|
@if($show->externalIds && $show->externalIds->imdb_id)
|
|
<a href="https://www.imdb.com/title/{{ $show->externalIds->imdb_id }}" class="btn btn-sm btn-outline-secondary" target="_blank">
|
|
<img src="{{ asset('/img/imdb.png') }}" alt="IMDB" height="20">
|
|
</a>
|
|
@endif
|
|
@if($show->externalIds && $show->externalIds->wikidata_id)
|
|
<a href="https://www.wikidata.org/wiki/{{ $show->externalIds->wikidata_id }}" class="btn btn-sm btn-outline-secondary" target="_blank">
|
|
<img src="{{ asset('/img/wikidata.png') }}" alt="Wikidata" height="20">
|
|
</a>
|
|
@endif
|
|
@if($show->externalIds && $show->externalIds->tvdb_id)
|
|
<a href="https://thetvdb.com/dereferrer/series/{{ $show->externalIds->tvdb_id }}" class="btn btn-sm btn-outline-secondary" target="_blank">
|
|
<img src="{{ asset('/img/tvdb.png') }}" alt="TVDB" height="20">
|
|
</a>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Trailer Button -->
|
|
@if($show->trailer && $show->trailer->first())
|
|
<a href="https://www.youtube.com/watch?v={{ $show->trailer->first()->key }}"
|
|
data-toggle="lightbox"
|
|
class="btn btn-primary w-100 mb-3">
|
|
<span class="iconify me-1" data-icon="mdi-play"></span>
|
|
Watch Trailer
|
|
</a>
|
|
@endif
|
|
|
|
@if($show->homepage)
|
|
<a href="{{ $show->homepage }}" target="_blank" class="btn btn-outline-secondary w-100 mb-3">
|
|
<span class="iconify me-1" data-icon="mdi-home"></span>
|
|
Homepage
|
|
</a>
|
|
@endif
|
|
</div>
|
|
|
|
<!-- Show Info -->
|
|
<div class="col-md-9">
|
|
<h1 class="movie-title mb-2">
|
|
{{ $show->name }}
|
|
@if($show->first_air_date)
|
|
<span class="text-muted">({{ $show->first_air_date->format('Y') }})</span>
|
|
@endif
|
|
</h1>
|
|
|
|
@if($show->tagline)
|
|
<p class="tagline text-muted mb-3">{{ $show->tagline }}</p>
|
|
@endif
|
|
|
|
<div class="overview mb-4">
|
|
<h5 class="mb-2">Overview</h5>
|
|
<p class="text-muted">{{ $show->overview }}</p>
|
|
</div>
|
|
|
|
<!-- Tabs -->
|
|
<div class="movie-tabs">
|
|
<ul class="nav nav-tabs" id="showTabs" role="tablist">
|
|
<li class="nav-item" role="presentation">
|
|
<button class="nav-link active" id="details-tab" data-bs-toggle="tab" data-bs-target="#details" type="button" role="tab">Details</button>
|
|
</li>
|
|
<li class="nav-item" role="presentation">
|
|
<button class="nav-link" id="cast-tab" data-bs-toggle="tab" data-bs-target="#cast" type="button" role="tab">Cast</button>
|
|
</li>
|
|
<li class="nav-item" role="presentation">
|
|
<button class="nav-link" id="crew-tab" data-bs-toggle="tab" data-bs-target="#crew" type="button" role="tab">Crew</button>
|
|
</li>
|
|
<li class="nav-item" role="presentation">
|
|
<button class="nav-link" id="releases-tab" data-bs-toggle="tab" data-bs-target="#releases" type="button" role="tab">Releases</button>
|
|
</li>
|
|
@if($show->backdrops)
|
|
<li class="nav-item" role="presentation">
|
|
<button class="nav-link" id="images-tab" data-bs-toggle="tab" data-bs-target="#images" type="button" role="tab">Images</button>
|
|
</li>
|
|
@endif
|
|
</ul>
|
|
<div class="tab-content p-3 border border-top-0 rounded-bottom" id="showTabsContent">
|
|
<div class="tab-pane fade show active" id="details" role="tabpanel">
|
|
@livewire(App\Livewire\ShowPage\Tabs\Details::class, ['show' => $show])
|
|
</div>
|
|
<div class="tab-pane fade" id="cast" role="tabpanel">
|
|
@livewire(App\Livewire\ShowPage\Tabs\Cast::class, ['show' => $show])
|
|
</div>
|
|
<div class="tab-pane fade" id="crew" role="tabpanel">
|
|
@livewire(App\Livewire\ShowPage\Tabs\Crew::class, ['show' => $show])
|
|
</div>
|
|
<div class="tab-pane fade" id="releases" role="tabpanel">
|
|
@livewire(App\Livewire\ShowPage\Tabs\Releases::class, ['show' => $show])
|
|
</div>
|
|
@if($show->backdrops)
|
|
<div class="tab-pane fade" id="images" role="tabpanel">
|
|
<div class="row">
|
|
@foreach($show->backdrops as $image)
|
|
<div class="col-md-3 mb-3">
|
|
<a href="http://image.tmdb.org/t/p/w1280/{{ $image->file_path }}" data-toggle="lightbox" data-gallery="{{ $show->slug }}_gallery">
|
|
<img src="http://image.tmdb.org/t/p/w342/{{ $image->file_path }}" alt="" class="img-fluid rounded shadow-sm">
|
|
</a>
|
|
</div>
|
|
@endforeach
|
|
</div>
|
|
</div>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Current Season -->
|
|
<div class="card mb-4">
|
|
<div class="card-header bg-white">
|
|
<h5 class="mb-0">{{ $currentSeason->name }}</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="row">
|
|
<div class="col-md-3">
|
|
<img src="http://image.tmdb.org/t/p/w342/{{ $currentSeason->poster_path }}"
|
|
alt="{{ $currentSeason->name }}"
|
|
class="img-fluid rounded shadow-sm mb-3">
|
|
</div>
|
|
<div class="col-md-9">
|
|
@if($currentSeason->overview)
|
|
<div class="mb-3">
|
|
<h6>Overview</h6>
|
|
<p class="text-muted">{{ $currentSeason->overview }}</p>
|
|
</div>
|
|
@endif
|
|
<div class="d-flex justify-content-between mb-3">
|
|
<div>
|
|
<span class="text-muted">Air Date:</span>
|
|
@if($currentSeason->air_date)
|
|
{{ \Carbon\Carbon::parse($currentSeason->air_date)->format('M d, Y') }}
|
|
@else
|
|
Unknown
|
|
@endif
|
|
</div>
|
|
<div>
|
|
<span class="text-muted">Episodes:</span> {{ $currentSeason->episode_count }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Episodes -->
|
|
<div class="card mb-4">
|
|
<div class="card-header bg-white">
|
|
<h5 class="mb-0">Episodes</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
@if(count($episodes) > 0)
|
|
<div class="list-group">
|
|
@foreach($episodes as $episode)
|
|
<div class="list-group-item list-group-item-action">
|
|
<div class="row">
|
|
<div class="col-md-2">
|
|
@if($episode->still_path)
|
|
<img src="http://image.tmdb.org/t/p/w185/{{ $episode->still_path }}"
|
|
alt="Episode {{ $episode->episode_number }}"
|
|
class="img-fluid rounded shadow-sm">
|
|
@else
|
|
<div class="bg-light rounded d-flex align-items-center justify-content-center" style="height: 100px;">
|
|
<span class="text-muted">No Image</span>
|
|
</div>
|
|
@endif
|
|
</div>
|
|
<div class="col-md-10">
|
|
<div class="d-flex justify-content-between">
|
|
<h5 class="mb-1">{{ $episode->episode_number }}. {{ $episode->name }}</h5>
|
|
@if($episode->vote_average > 0)
|
|
<span class="badge bg-warning">{{ $episode->vote_average }}</span>
|
|
@endif
|
|
</div>
|
|
@if($episode->air_date)
|
|
<p class="text-muted mb-2">
|
|
<small>{{ \Carbon\Carbon::parse($episode->air_date)->format('M d, Y') }}</small>
|
|
@if($episode->runtime)
|
|
<span class="mx-1">•</span> {{ $episode->runtime }} min
|
|
@endif
|
|
</p>
|
|
@endif
|
|
<p class="mb-1">{{ $episode->overview }}</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@endforeach
|
|
</div>
|
|
@else
|
|
<div class="alert alert-info">
|
|
No episodes available for this season.
|
|
</div>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Seasons -->
|
|
@if(count($seasons) > 0)
|
|
<div class="card mb-4">
|
|
<div class="card-header bg-white">
|
|
<h5 class="mb-0">All Seasons</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="row">
|
|
@foreach($seasons as $season)
|
|
<div class="col-md-2 mb-3">
|
|
<a href="{{ route('show.season', ['slug' => $show->slug, 'seasonNumber' => $season->season_number]) }}" class="text-decoration-none">
|
|
<div class="card h-100 border-0 shadow-sm {{ $season->season_number == $currentSeason->season_number ? 'border border-primary' : '' }}">
|
|
<img src="http://image.tmdb.org/t/p/w342/{{ $season->poster_path }}" alt="{{ $season->name }}" class="card-img-top">
|
|
<div class="card-body">
|
|
<h6 class="card-title">{{ $season->name }}</h6>
|
|
<p class="card-text"><small class="text-muted">{{ $season->episode_count }} episodes</small></p>
|
|
</div>
|
|
</div>
|
|
</a>
|
|
</div>
|
|
@endforeach
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@endif
|
|
|
|
<!-- Similar Shows -->
|
|
<div class="card mb-4">
|
|
<div class="card-header bg-white">
|
|
<h5 class="mb-0">Similar Shows</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
@livewire(App\Livewire\ShowPage\Similar::class, ['show' => $show])
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Recommendations -->
|
|
<div class="card mb-4">
|
|
<div class="card-header bg-white">
|
|
<h5 class="mb-0">Recommended</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
@livewire(App\Livewire\ShowPage\Recommended::class, ['show' => $show])
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Reviews Section -->
|
|
<div class="card mb-4">
|
|
<div class="card-header bg-white">
|
|
<h5 class="mb-0">Reviews</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
@if(Auth::check())
|
|
<form action="#" method="POST" class="mb-4">
|
|
@csrf
|
|
<div class="form-group">
|
|
<label for="content" class="form-label">Write a Review</label>
|
|
<textarea name="content" id="content" rows="3" class="form-control" placeholder="Share your thoughts about this show..."></textarea>
|
|
@error('content')
|
|
<div class="text-danger mt-1">{{ $message }}</div>
|
|
@enderror
|
|
</div>
|
|
<div class="mt-2">
|
|
<button type="submit" class="btn btn-primary">
|
|
<span class="iconify me-1" data-icon="mdi-send"></span>
|
|
Post Review
|
|
</button>
|
|
</div>
|
|
</form>
|
|
@else
|
|
<div class="alert alert-info">
|
|
<span class="iconify me-1" data-icon="mdi-information"></span>
|
|
You must be <a href="{{ route('login') }}" class="alert-link">logged in</a> to write a review.
|
|
</div>
|
|
@endif
|
|
|
|
<!-- Reviews List -->
|
|
<div class="reviews-list mt-4">
|
|
@foreach($comments as $comment)
|
|
<div class="review-item card mb-3">
|
|
<div class="card-body">
|
|
<div class="d-flex align-items-center mb-2">
|
|
@if($comment->author_avatar)
|
|
<img src="http://image.tmdb.org/t/p/w45/{{ $comment->author_avatar }}"
|
|
alt="{{ $comment->author_name }}"
|
|
class="rounded-circle me-2"
|
|
width="40"
|
|
height="40">
|
|
@else
|
|
<div class="rounded-circle bg-secondary me-2" style="width: 40px; height: 40px;"></div>
|
|
@endif
|
|
<div>
|
|
<h6 class="mb-0">{{ $comment->author_name }}</h6>
|
|
<small class="text-muted">
|
|
{{ $comment->published_at }}
|
|
</small>
|
|
</div>
|
|
@if($comment->author_rating)
|
|
<span class="badge bg-warning ms-2">
|
|
{{ $comment->author_rating }}
|
|
</span>
|
|
@endif
|
|
</div>
|
|
<div class="review-content">
|
|
{!! $comment->content !!}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@endforeach
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Sidebar -->
|
|
<div class="col-lg-3">
|
|
<div class="card">
|
|
<div class="card-body">
|
|
<div class="user-actions">
|
|
@include('layouts.user_actions')
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@endsection
|