<?php

namespace App\Models;

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

/**
 * App\Models\BookingDraftItem
 *
 * @property int $id
 * @property int $booking_id
 * @property int $travel_program_id
 * @property int|null $travel_class_id
 * @property int|null $draft_item_id
 * @property int|null $draft_type_id
 * @property string|null $request_date
 * @property int|null $days_start
 * @property int|null $days_duration
 * @property string|null $start_date
 * @property string|null $end_date
 * @property string|null $service
 * @property float|null $price_adult
 * @property int|null $adult
 * @property float|null $price_children
 * @property int|null $children
 * @property int|null $pos
 * @property int $in_pdf
 * @property int $status
 * @property int $comfort
 * @property \Illuminate\Support\Carbon|null $created_at
 * @property \Illuminate\Support\Carbon|null $updated_at
 * @property-read \App\Models\DraftItem|null $draft_item
 * @property-read \App\Models\DraftType|null $draft_type
 * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingDraftItem whereAdult($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingDraftItem whereBookingId($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingDraftItem whereChildren($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingDraftItem whereComfort($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingDraftItem whereCreatedAt($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingDraftItem whereDaysDuration($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingDraftItem whereDaysStart($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingDraftItem whereDraftItemId($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingDraftItem whereDraftTypeId($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingDraftItem whereEndDate($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingDraftItem whereId($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingDraftItem whereInPdf($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingDraftItem wherePos($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingDraftItem wherePriceAdult($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingDraftItem wherePriceChildren($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingDraftItem whereRequestDate($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingDraftItem whereService($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingDraftItem whereStartDate($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingDraftItem whereStatus($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingDraftItem whereTravelClassId($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingDraftItem whereTravelProgramId($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingDraftItem whereUpdatedAt($value)
 * @mixin \Eloquent
 * @property int|null $fewo_lodging_id
 * @property float|null $price
 * @property-read \App\Models\Booking $booking
 * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingDraftItem whereFewoLodgingId($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingDraftItem wherePrice($value)
 */
class BookingDraftItem extends Model
{
    protected $connection = 'mysql';

    protected $table = 'booking_draft_items';

    protected $fillable = [
        'booking_id',
        'travel_program_id',
        'fewo_lodging_id',
        'travel_class_id',
        'draft_item_id',
        'draft_type_id',
        'request_date',
        'days_start',
        'days_duration',
        'start_date',
        'end_date',
        'service',
        'price_adult',
        'adult',
        'price_children',
        'children',
        'price',
        'pos',
        'in_pdf',
        'comfort',
    ];

   /* public function booking()
    {
        return $this->belongsTo('App\Models\Booking', 'booking_id');
    }
    */

    public function booking()
    {
        return $this->belongsTo('App\Models\Booking', 'booking_id');
    }

    public function draft_item()
    {
        return $this->belongsTo('App\Models\DraftItem', 'draft_item_id');
    }

    public function draft_type()
    {
        return $this->belongsTo('App\Models\DraftType', 'draft_type_id');
    }

    public function _format_number($value){
        return preg_replace("/[^0-9,]/", "", $value);
    }
    
    public function getStartDateAttribute(){
        return isset($this->attributes['start_date']) ? Carbon::parse($this->attributes['start_date'])->format("d.m.Y") : '';
    }
    public function getEndDateAttribute(){
        return isset($this->attributes['end_date']) ? Carbon::parse($this->attributes['end_date'])->format("d.m.Y") : '';
    }

    public function setStartDateAttribute($value)
    {
        if (!$value) {
            $this->attributes['start_date'] = null;
        } else {
            $this->attributes['start_date'] = (new Carbon($value))->format('Y-m-d');
        }
    }
    public function setEndDateAttribute($value){
        if (!$value) {
            $this->attributes['end_date'] = null;
        } else {
            $this->attributes['end_date'] = (new Carbon($value))->format('Y-m-d');
        }
    }

    public function setPriceAttribute($value)
    {
        $value = $this->_format_number($value);
        $this->attributes['price'] = floatval(str_replace(',', '.', $value));
    }

    public function getPriceAttribute()
    {
        // 2 = decimal places |  '.' = decimal seperator | ',' = thousand seperator
        return number_format(($this->attributes['price']), 2, ',', '.');
    }

    public function getPriceRaw()
    {
        return isset($this->attributes['price']) ? $this->attributes['price'] : 0;
    }

}
