<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Carbon\Carbon;

class TimeTracker extends BaseModel
{
    use HasFactory;

    protected $fillable = [
        'user_id',
        'project_id',
        'task_id',
        'punch_in',
        'punch_out',
        'breaks',
        'total_minutes',
        'status',
        'description',
    ];

    protected $dates = ['punch_in', 'punch_out'];

    protected $casts = [
        'breaks' => 'array',
    ];

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function project()
    {
        return $this->belongsTo(Project::class);
    }

    public function task()
    {
        return $this->belongsTo(Task::class);
    }

    public function calculateTotalMinutes()
    {
        if (!$this->punch_in) return 0;

        $start = Carbon::parse($this->punch_in);
        $end = $this->punch_out ? Carbon::parse($this->punch_out) : now();
        
        $totalMinutes = $start->diffInMinutes($end);
        
        // Subtract break time
        if ($this->breaks) {
            $breakMinutes = 0;
            foreach ($this->breaks as $break) {
                if (isset($break['start']) && isset($break['end'])) {
                    $breakStart = Carbon::parse($break['start']);
                    $breakEnd = Carbon::parse($break['end']);
                    $breakMinutes += $breakStart->diffInMinutes($breakEnd);
                }
            }
            $totalMinutes -= $breakMinutes;
        }

        return max(0, $totalMinutes);
    }

    public function getFormattedDurationAttribute()
    {
        $minutes = $this->calculateTotalMinutes();
        $hours = floor($minutes / 60);
        $mins = $minutes % 60;
        return sprintf('%02d:%02d', $hours, $mins);
    }
}