<?php

namespace App\Models;

use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;

/**
 * Movie Theater Showings
 */

class Showing extends Model
{

    protected $table = 'showings';
    protected $primaryKey = 'showing_id';
    protected $fillable = [
        'movie_id',
        'showing_start',
        'room_id', // which room is showing the movie?
        'user_id', // who added the showing?
    ];

    protected $hidden = [
        'created_at',
        'updated_at',
    ];

    public static function findOrfail($id)
    {
        return Showing::where('showing_id', $id)->firstOrFail();
    }

    public function room()
    {
        return $this->belongsTo(Room::class, 'room_id', 'room_id');
    }

    public function movie()
    {
        return $this->belongsTo(Movie::class, 'movie_id', 'movie_id');
    }

    public function prices()
    {
        return $this->hasMany(Price::class, 'showing_id', 'showing_id');
    }

    public function nowPlaying()
    {
        return $this->where('showing_start', '>=', now())->get();
    }

    public function showing_end() {
        $date = new Carbon($this->showing_start);
        $date->addMinutes($this->movie->movie_length);
        return $date;
    }

    public function tickets()
    {
        return $this->hasMany(Ticket::class, 'showing_id', 'showing_id');
    }

    public function tickets_available() {
        $tickets = $this->room->seats()->count();
        $tickets_sold = $this->tickets()->count();
        return $tickets - $tickets_sold;
    }

    public function find($id)
    {
        return Showing::where('showing_id', $id)->first();
    }

    public function seatMatrix() {
        return $this->room->seatMatrix($this->showing_id);
    }
}