<?php

namespace Pterodactyl\Repositories\Eloquent;

use Carbon\Carbon;
use Pterodactyl\Models\Backup;
use Pterodactyl\Models\Server;
use Illuminate\Database\Eloquent\Relations\HasMany;

class BackupRepository extends EloquentRepository
{
    /**
     * @return string
     */
    public function model()
    {
        return Backup::class;
    }

    /**
     * Determines if too many backups have been generated by the server.
     *
     * @return \Illuminate\Support\Collection
     * @phpstan-return \Illuminate\Support\Collection<\Pterodactyl\Models\Backup>
     */
    public function getBackupsGeneratedDuringTimespan(int $server, int $seconds = 600)
    {
        // @phpstan-ignore-next-line
        return $this->getBuilder()
            ->withTrashed()
            ->where('server_id', $server)
            ->where(function ($query) {
                $query->whereNull('completed_at')
                    ->orWhere('is_successful', '=', true);
            })
            ->where('created_at', '>=', Carbon::now()->subSeconds($seconds)->toDateTimeString())
            ->get()
            ->toBase();
    }

    /**
     * Returns a query filtering only non-failed backups for a specific server.
     */
    public function getNonFailedBackups(Server $server): HasMany
    {
        return $server->backups()->where(function ($query) {
            $query->whereNull('completed_at')
                ->orWhere('is_successful', true);
        });
    }
}