using ComputerHardwareStoreContracts.BindingModels;
using ComputerHardwareStoreContracts.ViewModels;
using Microsoft.AspNetCore.Mvc;
using System.Xml.Linq;

namespace VendorClient.Controllers
{
    [Route("Home/[action]")]
    public class BuildController : Controller
    {
        private readonly ILogger _logger;

        private const string API_ROUTE = "api/builds";

        public BuildController(ILogger<BuildController> logger)
        {
            _logger = logger;
        }

        [HttpGet]
        public IActionResult AddBuildToPurchase()
        {
            return View();
        }

        [HttpGet]
        public IActionResult Builds()
        {
            if (APIClient.Vendor == null)
            {
                return Redirect("~/Home/Enter");
            }
            return View(APIClient.GetRequest<List<BuildViewModel>>($"{API_ROUTE}/getbuilds?userId={APIClient.Vendor.Id}"));
        }

        [HttpGet]
        public void BuildCreate(string buildName)
        {
            if (APIClient.Vendor == null)
            {
                throw new Exception("Вы как суда попали? Суда вход только авторизованным");
            }
            if (string.IsNullOrEmpty(buildName))
            {
                throw new Exception($"Имя сборки не должно быть пустым");
            }
            APIClient.PostRequest($"{API_ROUTE}/create", new BuildBindingModel
            {
                Name = buildName,
                VendorId = APIClient.Vendor.Id
            });
            Response.Redirect("~/Home/Builds");
        }

        [HttpGet]
        public void BuildDelete(int id)
        {
            if (APIClient.Vendor == null)
            {
                throw new Exception("Вы как суда попали? Суда вход только авторизованным");
            }
            if (id <= 0)
            {
                throw new Exception($"Идентификатор сборки не может быть ниже или равен 0");
            }
            APIClient.PostRequest("api/build/DeleteBuild", new BuildBindingModel
            {
                Id = id
            });
            Response.Redirect("~/Home/Builds");
        }

        [HttpGet]
        public void BuildUpdate(string buildName, int buildId)
        {
            if (APIClient.Vendor == null)
            {
                throw new Exception("Вы как суда попали? Суда вход только авторизованным");
            }
            if (string.IsNullOrEmpty(buildName))
            {
                throw new Exception($"Имя сборки не должно быть пустым");
            }
            if (buildId <= 0)
            {
                throw new Exception($"Идентификатор сборки не может быть ниже или равен 0");
            }
            APIClient.PostRequest($"{API_ROUTE}/update", new BuildBindingModel
            {
                Id = buildId,
                Name = buildName
            });
            Response.Redirect("~/Home/Builds");
        }
    }
}