<?php

namespace Jaga\Traits;

trait SoftDelete 
{
    /**
     * Indicates if the model is currently force deleting.
     *
     * @var bool
     */

    public function isDeleted()
    {
        return empty($this->deleted_at);
    }

    public function restore($restored_by = null)
    {
        $this->deleted_at = null;
        if (property_exists($this, 'deleted_by')) {
            $this->deleted_by = null;
        }
        if (
            property_exists($this, 'updated_by') 
            && !empty($restored_by)
        ) {
            $this->updated_by = $restored_by;
        }
        
        return $this->save();
    }

    // override delete method
    public function delete($deleted_by = null)
    {
        $this->beforeDelete();

        $this->deleted_at = date("Y-m-d H:i:s");
        if (
            property_exists($this, 'deleted_by') 
            && !empty($deleted_by)
        ) {
            $this->deleted_by = $deleted_by;
        }

        return $this->save();
    }

    public function forceDelete()
    {
        $this->beforeDelete();

        return parent::delete();
    }

    public function beforeDelete()
    {
        return;
    }
}