<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use App\Models\Activity;
use App\Models\AssignMaterial;
use Carbon\Carbon;

class ReportActivityMaterial extends Model
{
	protected $table = 'report_activity_material';

	const CREATED_AT = 'created_at';
	const UPDATED_AT = 'updated_at';

	protected $fillable = [
		'activity_id', 'user_id', 'qty', 'lat', 'lon','assign_material_id',
		'report_date', 'description', 'created_at', 'created_by', 'updated_at', 'updated_by'
	];

	public function getReportDateAttribute($value)
	{
		return Carbon::createFromTimestamp(strtotime($value))
			->timezone(env('APP_TIMEZONE'))
			->toDateTimeString();
	}

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

		static::created(function($data) {
			$activity = Activity::find($data->activity_id);
			$assignedMaterial = AssignMaterial::find($data->assign_material_id);

			$biayaActual = $activity->biaya_actual + floatval($assignedMaterial->budget) * floatval($data->qty);

			$dataPlan = AssignMaterial::where('activity_id', $activity->id)->get();
			if($dataPlan[0]->status_activity == 'done'){
				$percentage = 100;
			} else {
				$totalPlan = $dataPlan->sum('qty_planning');
				$totalVolumeActual = ReportActivityMaterial::where('activity_id', '=', $activity->id)->sum("qty");
				$percentage = ($totalVolumeActual * 100) / $totalPlan;
				$percentage = $percentage >= config('app.max_percentage_not_done') ? config('app.max_percentage_not_done') : $percentage;
			}

			$activity->update([
				"persentase_progress" => $percentage,
				"biaya_actual" => $biayaActual,
			]);

			$activity->save();
		});

		static::deleted(function($data) {

			$activity = Activity::find($data->activity_id);
			$assignedMaterial = AssignMaterial::find($data->assign_material_id);

			$activity->biaya_actual -= floatval($assignedMaterial->budget) * floatval($data->qty);
            $activity->actual_start = null;
            $activity->actual_end = null;

			$dataPlan = AssignMaterial::where('activity_id', $activity->id)->get();
				$totalPlan = $dataPlan->sum('qty_planning');
				$totalVolumeActual = ReportActivityMaterial::where('activity_id', '=', $activity->id)->sum("qty");
				$percentage = ($totalVolumeActual * 100) / $totalPlan;
				$activity->persentase_progress = $percentage >= config('app.max_percentage_not_done') ? config('app.max_percentage_not_done') : $percentage;
			$activity->save();

		});

	}
}