<?php
/**
 * Task Domain Model
 *
 * PHP version 8.2+
 *
 * Represents a task entity with all its properties.
 *
 * @category DomainModel
 * @package  IronKanban\Domain
 * @author   Keith Solomon <keith@keithsolomon.net>
 * @license  Unlicense https://unlicense.org
 * @link     https://git.keithsolomon.net/keith/IronKanban
 */

declare(strict_types=1);

namespace IronKanban\Domain;

/**
 * Task class represents a domain model for a task
 *
 * @category DomainModel
 * @package  IronKanban\Domain
 * @author   Keith Solomon <keith@keithsolomon.net>
 * @license  Unlicense https://unlicense.org
 * @link     https://git.keithsolomon.net/keith/IronKanban
 */
class Task {
    /**
     * Constructor for Task
     *
     * @param string $id        The task identifier.
     * @param string $title     The task title.
     * @param string $projectId The project identifier.
     * @param string $column    The column the task belongs to.
     * @param int    $order     The order of the task.
     * @param bool   $completed Whether the task is completed.
     * @param string $priority  The priority level of the task.
     * @param bool   $isActive  Whether the task is active.
     * @param string $body      The task description.
     * @param string $fileName  The task file name.
     * @param array  $meta      Additional metadata (optional).
     */
    public function __construct(
        public string $id,
        public string $title,
        public string $projectId,
        public string $column,
        public int $order,
        public bool $completed,
        public string $priority,
        public bool $isActive,
        public string $body,
        public string $fileName,
        public array $meta = array()
    ) {
    }
}
