/// <summary>
        /// Execute  the process.
        /// </summary>
        /// <param name="filePath">File path</param>
        /// <param name="outFileDirectory">Output file directory</param>
        public static void ProcessFile(string filePath, string outFileDirectory)
        {
            try
            {
                _listSalesman = new List <Salesman>();
                _listClient   = new List <Client>();
                _listSales    = new List <Sales>();

                // Checks if the file is not being used by another process
                while (SalesAnalysisRepository.IsFileLocked(filePath))
                {
                    Thread.Sleep(1500);
                }

                string fileName = Path.GetFileNameWithoutExtension(filePath);
                var    lines    = SalesAnalysisRepository.ReadFile(filePath);
                ProcessLines(lines);
                ProcessResult(string.Concat(outFileDirectory, fileName, ".done.dat"));
                File.Delete(filePath);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        /// <summary>
        /// Execute  the process.
        /// </summary>
        /// <param name="filePath">File path</param>
        /// <param name="outFileDirectory">Output file directory</param>
        private static void ProcessResult(string outFileDirectory)
        {
            int    qtdClient    = _listClient.Count;
            int    qtdSalesman  = _listSalesman.Count;
            int    maxIdSale    = _listSales.MaxBy(x => x.TotalValueSale).Id;
            string salesmanName = _listSales.MinBy(x => x.TotalValueSale).SalesmanName;

            SalesAnalysisRepository.SaveData(outFileDirectory, qtdClient, qtdSalesman, maxIdSale, salesmanName);
        }