using Microsoft.EntityFrameworkCore; using PartSource.Data; using PartSource.Data.Models; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; namespace PartSource.Services { public class VehicleService { private readonly PartSourceContext _partSourceContext; public VehicleService(PartSourceContext partSourceContext) { _partSourceContext = partSourceContext; } public async Task> GetAllMakes() { return await _partSourceContext.VehicleMakes.ToListAsync(); } public async Task> GetModels(int makeId, int year) { return await _partSourceContext.VehicleData.Where(d => d.MakeId == makeId && d.Year == year ) .ToListAsync(); } public async Task> GetBaseVehicles(int makeId, int modelId, int year) { return await _partSourceContext.BaseVehicles.Where(d => d.MakeId == makeId && d.ModelId == modelId && d.Year == year ) .ToListAsync(); } public async Task> GetEngines(int baseVehicleId) { return await _partSourceContext.Engines.Where(e => e.BaseVehicleId == baseVehicleId).ToListAsync(); } public async Task> GetEngines(int baseVehicleId, int submodelId) { return await _partSourceContext.Engines.Where(e => e.BaseVehicleId == baseVehicleId && e.SubmodelId == submodelId ) .ToListAsync(); } public async Task> GetSubmodels(int makeId, int modelId, int year) { return await _partSourceContext.Submodels.Where(s => s.MakeId == makeId && s.ModelId == modelId && s.Year == modelId ) .ToListAsync(); } public async Task GetVehicle(int baseVehicleId, int engineConfigId, int submodelId) { return await _partSourceContext.VehicleData.FirstOrDefaultAsync(d => d.BaseVehicleId == baseVehicleId && d.EngineConfigId == engineConfigId && d.SubmodelId == submodelId ); } public IList GetYmmFitment(IList vehicles) { if (vehicles.Count == 0) { return null; } IList fitmentTags = new List(); IList makeModels = vehicles.Select(v => $"{v.MakeName},{v.ModelName}").Distinct().ToList(); foreach (string makeModel in makeModels) { string make = makeModel.Split(',')[0]; string model = makeModel.Split(',')[1]; List years = vehicles .Where(v => v.MakeName == make && v.ModelName == model) .OrderBy(v => v.Year) .Select(v => v.Year.HasValue ? v.Year.Value.ToString().Trim() : string.Empty) .Distinct() .ToList(); string tag = $"{string.Join('-', years)} {make.Trim()} {model.Trim()}"; Console.WriteLine(tag); fitmentTags.Add(tag); } return fitmentTags; } public IList GetVehicleIdFitment(IList vehicles) { return vehicles.Select(v => v.VehicleToEngineConfigId).ToArray(); } public IList GetVehiclesForPart(string partNumber, string lineCode) { partNumber = Regex.Replace(partNumber, "[^a-zA-Z0-9]", string.Empty); IQueryable whiCodes = _partSourceContext.DcfMappings .Where(d => d.LineCode == lineCode) .Select(d => d.WhiCode); IQueryable vehicles = _partSourceContext.Fitments .Where(f => f.PartNumber == partNumber && whiCodes.Contains(f.LineCode)) .Join(_partSourceContext.VehicleData, f => new { f.BaseVehicleId, f.EngineConfigId }, v => new { v.BaseVehicleId, v.EngineConfigId }, (f, v) => v); return vehicles.ToList(); } } }