using System;
using System.Collections.Generic;

namespace Project.Tasks.Editor
{
    internal static class TaskBoardConstants
    {
        public const int MinutesPerHour = 60;
        public const int HoursPerDay = 8;
        public const int MinutesPerDay = HoursPerDay * MinutesPerHour;
        public const int WorkDaysPerWeek = 5;
        public const int MinutesPerWeek = WorkDaysPerWeek * MinutesPerDay;

        public static readonly string[] Statuses = { "BackLog", "ToDo", "InProgress", "Review", "Done" };
        public static readonly string[] Priorities = { "Lowest", "Low", "Medium", "High", "Highest" };
    }

    [Serializable]
    internal sealed class TaskRecord
    {
        public string Id;
        public string Title;
        public string Status;
        public string Priority;
        public string Area;
        public string Owner;
        public string Created;
        public string Updated;
        public string ExecutionTime;
        public string RelativeFilePath;
        public string AbsoluteFilePath;
        public string IndexSummary;
        public string TaskSummary;
        public int EstimatedMinutes = -1;
        public string Header;
        public string Why;
        public string ExpectedOutcome;
        public string CurrentContext;
        public string AcceptanceCriteria;
        public string Verification;
        public string Risks;
        public string HumanDecisions;
        public string DecisionLog;
        public string HandoffNotes;
        public bool FileExists;
        public bool DetailsLoaded;
        public int IndexLineNumber = -1;
        public readonly List<string> ValidationMessages = new List<string>();
    }

    [Serializable]
    internal sealed class TaskBoardData
    {
        public string ProjectRoot;
        public string TasksDirectory;
        public string IndexPath;
        public string OwnersConfigPath;
        public readonly List<TaskRecord> Tasks = new List<TaskRecord>();
        public readonly List<string> Warnings = new List<string>();
        public readonly List<string> OwnerPresets = new List<string>();
    }
}
