using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MongoDB.Bson.Serialization.Attributes;
using Wabbajack.CacheServer.Jobs;

namespace Wabbajack.CacheServer.DTOs.JobQueue
{
    public abstract class AJobPayload
    {
        public static List<Type> KnownSubTypes = new List<Type> {typeof(IndexJob)};
        public static Dictionary<Type, string> TypeToName { get; set; }
        public static Dictionary<string, Type> NameToType { get; set; }


        [BsonIgnore]
        public abstract string Description { get; }

        public virtual bool UsesNexus { get; } = false;

        public abstract Task<JobResult> Execute();

        static AJobPayload()
        {
            NameToType = KnownSubTypes.ToDictionary(t => t.FullName.Substring(t.Namespace.Length + 1), t => t);
            TypeToName = NameToType.ToDictionary(k => k.Value, k => k.Key);
        }

    }
}