<?php

declare(strict_types=1);

namespace App\Framework\Queue\Migrations;

use App\Framework\Database\ConnectionInterface;
use App\Framework\Database\Migration\Migration;
use App\Framework\Database\Migration\MigrationVersion;
use App\Framework\Database\Schema\Schema;

/**
 * Migration für Job Assignments Tabelle
 */
final readonly class CreateJobAssignmentsTable implements Migration
{
    public function up(ConnectionInterface $connection): void
    {
        $schema = new Schema($connection);

        $schema->createIfNotExists('job_assignments', function ($table) {
            // Job ID - eindeutige Zuordnung
            $table->string('job_id', 32)->primary();

            // Worker der den Job verarbeitet
            $table->string('worker_id', 32);

            // Queue Name für Statistiken
            $table->string('queue_name', 255);

            // Assignment Timestamp
            $table->timestamp('assigned_at')->default('CURRENT_TIMESTAMP');

            // Indexes
            $table->index('worker_id', 'idx_assignment_worker');
            $table->index('queue_name', 'idx_assignment_queue');
            $table->index(['worker_id', 'assigned_at'], 'idx_assignment_worker_time');
            $table->index('assigned_at', 'idx_assignment_time');
        });

        $schema->execute();
    }

    public function down(ConnectionInterface $connection): void
    {
        $schema = new Schema($connection);
        $schema->dropIfExists('job_assignments');
        $schema->execute();
    }

    public function getVersion(): MigrationVersion
    {
        return MigrationVersion::fromTimestamp("2024_12_19_145000");
    }

    public function getDescription(): string
    {
        return 'Create job_assignments table for tracking job-to-worker assignments';
    }

    public function getDomain(): string
    {
        return "Framework";
    }
}
