using Microsoft.Extensions.Logging;
using PARR.Core.Repositories.Interfaces;
using PARR.DAL.Context;
using PARR.Domain.Entities;
using PARR.Domain.Enums;

namespace PARR.DAL.Repositories
{
    internal class OrderStatusRepository : IOrderStatusRepository
    {
        private readonly DataContext dataContext;
        private readonly ILogger<OrderStatusRepository> logger;

        public OrderStatusRepository(DataContext dataContext, ILogger<OrderStatusRepository> logger)
        {
            this.dataContext = dataContext;
            this.logger = logger;
        }

        public IQueryable<OrderStatus> Get()
        {
            logger.LogDebug("Получаю набор статусов нарядов");
            return dataContext.OrderStatuses;
        }


        public OrderStatusEnum GetOrderStatusByName(string statusName)
        {
            logger.LogDebug("Поиск статуса наряда по имени: {StatusName}", statusName);

            switch (statusName.Trim())
            {
                case "1-Направлен в группу":
                    logger.LogDebug("Найден статус: {StatusEnum}", OrderStatusEnum.New);
                    return OrderStatusEnum.New;
                case "2-В работе":
                    logger.LogDebug("Найден статус: {StatusEnum}", OrderStatusEnum.InWork);
                    return OrderStatusEnum.InWork;
                case "3-Приостановлен":
                    logger.LogDebug("Найден статус: {StatusEnum}", OrderStatusEnum.Stop);
                    return OrderStatusEnum.Stop;
                case "4-Выполнен":
                    logger.LogDebug("Найден статус: {StatusEnum}", OrderStatusEnum.Complete);
                    return OrderStatusEnum.Complete;
                case "5-Закрыт":
                    logger.LogDebug("Найден статус: {StatusEnum}", OrderStatusEnum.Closed);
                    return OrderStatusEnum.Closed;
                default:
                    logger.LogWarning(
                        "Не смог распознать статус наряда, вернул значение по умолчанию: {DefaultStatus}, входящее значение: {InputStatus}",
                        OrderStatusEnum.New, statusName);
                    return OrderStatusEnum.New;
            }
        }
    }
}