using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;

namespace Test_Merge
{
    public class DriverNameWindow : Window
    {
        public static Random rnd = new Random();
        public DriverNameWindow(Bitmap image, Rectangle bounds) : base(image, bounds)
        {
            Name = "Name";
        }
        /// <summary>
        /// Decodes using OCR wich driver name is in the image
        /// </summary>
        /// <param name="DriverList"></param>
        /// <returns>The driver name in string</returns>
        public override async Task<object> DecodePng(List<string> DriverList)
        {
            string result = "";
            result = await GetStringFromPng(WindowImage, Engine);

            if (!IsADriver(DriverList, result))
            {
                //I put everything in uppercase to try to lower the chances of bad answers
                result = FindClosestMatch(DriverList.ConvertAll(d => d.ToUpper()), result.ToUpper());
            }
            return result;
        }
        /// <summary>
        /// Verifies that the name found in the OCR is a valid name
        /// </summary>
        /// <param name="driverList"></param>
        /// <param name="potentialDriver"></param>
        /// <returns>If ye or no the driver exists</returns>
        private static bool IsADriver(List<string> driverList, string potentialDriver)
        {
            bool result = false;
            //I cant use drivers.Contains because it has missmatched cases and all
            foreach (string name in driverList)
            {
                if (name.ToUpper() == potentialDriver.ToUpper())
                    result = true;
            }
            return result;
        }
    }
}
