using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using CoviDok.Api;
using CoviDok.Api.Request;
using CoviDok.Api.Response;
using CoviDok.BLL;
using CoviDok.data;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace CoviDok.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class CaseController : ControllerBase
    {
        // POST /api/Case/{id}
        [HttpGet("{id}")]
        public async Task<ActionResult<Case>> GetCase(string id, AuthGet auth)
        {
            if (auth.SessionID != "a") return Unauthorized();

            List<Update> updates = new List<Update>();
            for (int i = 0; i < 10; i++)
            {
                Update u = new Update
                {
                    Content = i.ToString(),
                    Sender = "Dr. A B",
                    Id = i.ToString()
                };
                updates.Add(u);
            }
            Case c = new Case
            {
                Id = "asasadf",
                DoctorID = "hehegbvdesv",
                ParentID = "qgwenhjegh",
                ChildID = "egwbenbeb",
                CaseStatus = CaseStatus.InProgress
            };

            return c;
        }

        // POST /api/Case/{id}/update

        [HttpPut("{id}/update")]
        public async Task<IActionResult> PostUpdate(string id, CaseUpdate data)
        {
            if (data.SessionID != "a") return Unauthorized();

            return Ok();
        }

        // POST /api/Case/{id}/close
        [HttpPost("{i}/close")]
        public async Task<IActionResult> PostClose(string id, CaseUpdate data)
        {
            if (data.SessionID != "a") return Unauthorized();
            // if not doctor: unauthorized
            return Ok();
        }

        // POST /api/Case/filter
        public async Task<ActionResult<FilteredCases>> Filter(CaseFilter filters)
        {
            if (filters.SessionID != "a") return Unauthorized();

            FilteredCases cases = new FilteredCases();
            for (int i = 0; i < 10; i++)
            {
                cases.Cases.Add(Tools.MockCase(filters.Filters));
            }

            return cases;
            
        }

    }
}