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

namespace CoviDok.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ImagesController : ControllerBase
    {
        private MinioHandler MinioHandler = new MinioHandler(
            "192.168.0.160:9000",
            "secretaccesskey",
            "secretsecretkey");
        private readonly string BucketName = "test1";

        [HttpPost]
        public async Task<GenericResponse> OnPostImage(ImagePost post)
        {
            GenericResponse response = new GenericResponse();
            if (post.SessionID != "a")
            {
                response.Status = Status.Error;
                response.Body["reason"] = "unauthorized";
                return response;
            }
            
            MinioResult Result = await MinioHandler.UploadImage(BucketName, post.File.OpenReadStream(), post.File.Length, post.File.FileName);
            if (!Result.Success) response.Status = Status.Error;
            response.Body["reason"] = Result.Data;

            return response;
        }

        public async Task<IActionResult> OnGetImage(ImageGet imageGet)
        {
            string[] attrs = imageGet.ImageID.Split(":");
            if (attrs.Length != 2) return BadRequest();
            
            FileStreamResult res = null; ;
            await MinioHandler.GetImage(imageGet.ImageID, (stream) => {
                res = File(stream, attrs[1]);
            });
            return res;
        }
    }
}