using Microsoft.AspNetCore.Mvc;
using PartSource.Data.Models;
using PartSource.Services;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
using NexpartMake = PartSource.Data.Nexpart.Make;
using NexpartModel = PartSource.Data.Nexpart.Model;
using NexpartEngine = PartSource.Data.Nexpart.Engine;
using NexpartSubmodel = PartSource.Data.Nexpart.SubModel;
namespace PartSource.Api.Controllers
{
///
/// This controller exists to enable legacy support for the old Nexpart-based vehicle lookup.
///
[Route("vehicles")]
[Route("v1/vehicles")]
[ApiController]
[ApiExplorerSettings(GroupName = "v1")]
public class LegacyVehiclesController : BaseNexpartController
{
private readonly VehicleService _vehicleService;
public LegacyVehiclesController(VehicleService vehicleService)
{
_vehicleService = vehicleService;
}
[HttpGet]
[Route("makes")]
public async Task GetMakes()
{
IList vehicleMakes = await _vehicleService.GetMakes();
IList nexpartMakes = new List();
foreach (VehicleMake make in vehicleMakes)
{
nexpartMakes.Add(new NexpartMake
{
Id = make.MakeId,
Value = make.Name.Trim()
});
}
return Ok(new { data = new { make = nexpartMakes } });
}
[HttpGet]
[Route("models/makeid/{makeId}/modelyear/{year}")]
public async Task GetModels(int makeId, int year)
{
IList vehicleModels = await _vehicleService.GetModels(makeId, year);
IList nexpartModels = new List();
foreach (VehicleModel model in vehicleModels)
{
nexpartModels.Add(new NexpartModel
{
Id = model.ModelId,
Value = model.Name.Trim()
});
}
return Ok(new { data = new[] { new { model = nexpartModels } } });
}
[HttpGet]
[Route("basevehicle/makeid/{makeId}/modelid/{modelId}/modelyear/{year}")]
[Route("basevehicles/makeid/{makeId}/modelid/{modelId}/modelyear/{year}")]
public async Task GetBaseVehicle(int makeId, int modelId, int year)
{
BaseVehicle baseVehicle = await _vehicleService.GetBaseVehicle(makeId, modelId, year);
return Ok(new { data = baseVehicle });
}
[HttpGet]
[Route("engines/basevehicleid/{baseVehicleId}")]
[Route("engines/basevehicleid/{baseVehicleId}/submodelid/{subModelId}")]
public async Task GetEngines(int baseVehicleId, int? submodelId = null)
{
IList nexpartEngines = new List();
IList engines = submodelId == null
? await _vehicleService.GetEngines(baseVehicleId)
: await _vehicleService.GetEngines(baseVehicleId, (int)submodelId);
foreach(Engine engine in engines)
{
nexpartEngines.Add(new NexpartEngine
{
Id = engine.EngineConfigId,
Value = engine.Description.Trim()
});
}
return Ok(new { data = new { engine = nexpartEngines } });
}
[HttpGet]
[Route("trim/makeid/{makeId}/modelid/{modelId}/modelyear/{year}")]
[Route("submodels/makeid/{makeId}/modelid/{modelId}/modelyear/{year}")]
public async Task GetSubmodels(int makeId, int modelId, int year)
{
IList submodels = await _vehicleService.GetSubmodels(makeId, modelId, year);
IList nexpartSubmodels = new List();
foreach (Submodel submodel in submodels)
{
nexpartSubmodels.Add(new NexpartSubmodel
{
Id = submodel.SubmodelId.ToString(),
Description = submodel.Name.Trim()
});
}
return Ok(new { data = new { subModel = nexpartSubmodels } });
}
[HttpGet]
[Route("detail/basevehicleid/{baseVehicleId}/submodelid/{submodelId}/engineconfigid/{engineConfigId}")]
public async Task GetVehicleDetail(int baseVehicleId, int submodelId, int engineConfigId)
{
Vehicle vehicle = await _vehicleService.GetVehicle(baseVehicleId, engineConfigId, submodelId);
return Ok(new { data = vehicle });
}
[HttpGet]
[Route("types")]
public ActionResult GetVehicleTypes()
{
return new StatusCodeResult((int)HttpStatusCode.Gone);
}
[HttpGet]
[Route("makes/vehicletypeid/{vehicleTypeId}")]
public ActionResult GetMakes(int vehicleTypeId)
{
return new StatusCodeResult((int)HttpStatusCode.Gone);
}
[HttpGet]
[Route("models/makeid/{makeId}/modelyear/{year}/vehicletypeid/{vehicleTypeId}")]
public ActionResult GetModels(int makeId, int year, int vehicleTypeId)
{
return new StatusCodeResult((int)HttpStatusCode.Gone);
}
}
}