using Microsoft.AspNetCore.Mvc;
using WebApp.Data;
using WebApp.Entities;

namespace WebApp.Controllers.Api;

[ApiController]
[Route("api/events")]
public class EventsApiController : ControllerBase
{
    private readonly ApplicationDbContext _context;

    public EventsApiController(ApplicationDbContext context)
    {
        _context = context;
    }

    // GET: /api/events
    [HttpGet]
    public IActionResult GetAll()
    {
        var events = _context.Events.ToList();
        return Ok(events);
    }

    // GET: /api/events/5
    [HttpGet("{id}")]
    public IActionResult GetById(int id)
    {
        var ev = _context.Events.Find(id);
        if (ev == null)
            return NotFound();

        return Ok(ev);
    }

    // POST: /api/events
    [HttpPost]
    public IActionResult Create([FromBody] Event ev)
    {
        if (!ModelState.IsValid)
            return BadRequest(ModelState);

        ev.EventDate = DateTime.SpecifyKind(ev.EventDate, DateTimeKind.Utc);

        _context.Events.Add(ev);
        _context.SaveChanges();

        return CreatedAtAction(nameof(GetById), new { id = ev.EventId }, ev);
    }

    // PUT: /api/events/5
    [HttpPut("{id}")]
    public IActionResult Update(int id, [FromBody] Event updated)
    {
        if (id != updated.EventId)
            return BadRequest("ID w URL nie zgadza się z obiektem.");

        var ev = _context.Events.Find(id);
        if (ev == null)
            return NotFound();

        ev.Title = updated.Title;
        ev.Description = updated.Description;
        ev.Location = updated.Location;
        ev.EventDate = updated.EventDate;
        ev.OrganisationId = updated.OrganisationId;

        _context.SaveChanges();
        return NoContent();
    }

    // DELETE: /api/events/5
    [HttpDelete("{id}")]
    public IActionResult Delete(int id)
    {
        var ev = _context.Events.Find(id);
        if (ev == null)
            return NotFound();

        _context.Events.Remove(ev);
        _context.SaveChanges();

        return NoContent();
    }
}
