<?php

class BudgetOperationObserver extends \Eloquent {
    
    protected static $names = [];

    protected static function getChangedInfo($model){
        $names = $model->tableNames;
        $infos = [];
        $changes = $model->getChanges();

        foreach($changes as $key => $item){
          if (array_key_exists($key, $names) && $item['old'] != $item['new']) {
            $infos[] = '<b>'.$names[$key].'</b>'.': '.$item['old'].' -> '.$item['new'];
          }
        }
        return implode("<br>", $infos);
    }

    public static function created($operation){
        $comment = 'Создание операции.';
        
        // из выгрузки
        if($operation->budget_upload_id){
          $comment.= ' Выгрузка №'.$operation->budget_upload_id;
        }
        
        BudgetOperationHistory::create(array(
            'operation_id' => $operation->id,
            'user_id'		   => $operation->user_id,
            'project_id'	 => $operation->project_id,
            'type'		     => BudgetOperationHistory::TYPE_OP_CREATE,
            'comment'		   => $comment
        ));
    }

    public static function updating($operation){
        $comment = BudgetOperationObserver::getChangedInfo($operation);
        if($comment != null){
            BudgetOperationHistory::create(array(
                'operation_id' => $operation->id,
                'user_id'		   => (Auth::user()->id)? Auth::user()->id : null,
                'project_id'	 => $operation->project_id,
                'type'		     => BudgetOperationHistory::TYPE_OP_CHANGE,
                'comment'		   => $comment
            ));
        }
    }

    public static function deleted($operation){
        $comment = 'Операция удалена';
        $type = BudgetOperationHistory::TYPE_OP_DELETE;
        
        // удаление при закрытии месяца
        if($operation->isarchived){
            $type = BudgetOperationHistory::TYPE_OP_DELETE_CL_MONTH;
        }
        
        BudgetOperationHistory::create(array(
            'operation_id' => $operation->id,
            'user_id'		   => (Auth::user()->id)? Auth::user()->id : null,
            'project_id'	 => $operation->project_id,
            'type'		     => $type,
            'comment'		   => $comment
        ));
    }

    public static function restored($operation){
        $comment = 'Операция восстановлена';
        
        BudgetOperationHistory::create(array(
            'operation_id' => $operation->id,
            'user_id'		   => (Auth::user()->id)? Auth::user()->id : null,
            'project_id'	 => $operation->project_id,
            'type'		     => BudgetOperationHistory::TYPE_OP_RESTORE,
            'comment'		   => $comment
        ));
    }
}