<?php

namespace App\Models;

use App\Models\Concerns\Reportable;
use Illuminate\Database\Eloquent\Model;

/**
 * Change proposal
 *
 * @property int $id
 * @property \Carbon\Carbon $created_at
 * @property \Carbon\Carbon $updated_at
 * @property int $table_id
 * @property int $revision_id
 * @property int $author_id
 * @property string $note
 * @property User $author
 * @property Table $table
 * @property Revision $revision
 * @property object $changes - JSONB
 */
class Proposal extends Model
{
    use Reportable;
    protected $guarded = [];

    protected static function boot()
    {
        parent::boot();

        static::deleting(function(Proposal $self) {
            $self->reportsOf()->delete();

            // update refcounts
            $rev = $self->revision;
            $rev->decrement('refs');

            // Delete the revision if it has no other refs (manually, to update row refs)
            if ($rev->refs <= 0) $rev->delete();
        });
    }

    /** Authoring user */
    public function author()
    {
        return $this->belongsTo(User::class, 'author_id');
    }

    /** Target revision */
    public function revision()
    {
        return $this->belongsTo(Revision::class);
    }

    /** Target table (that this was submitted to) */
    public function table()
    {
        return $this->belongsTo(Table::class);
    }
}