using AsbCloudApp.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.IO;
using System.Threading;
using System.Threading.Tasks;

namespace AsbCloudWebApi.Controllers
{
    [Route("api/well/{idWell}/drillingProgram")]
    [ApiController]
    [Authorize]
    public class DrillingProgramController : ControllerBase
    {
        private readonly IDrillingProgramService drillingProgramService;
        private readonly IFileService fileService;

        public DrillingProgramController(IDrillingProgramService drillingProgramService, IFileService fileService)
        {
            this.drillingProgramService = drillingProgramService;
            this.fileService = fileService;
        }

        [HttpGet]
        [ProducesResponseType(typeof(PhysicalFileResult), (int)System.Net.HttpStatusCode.OK)]
        public async Task<IActionResult> GetAsync(int idWell, CancellationToken token = default)
        {
            var fileInfo = await drillingProgramService.GetAsync(idWell, token)
                .ConfigureAwait(false);
            if (fileInfo is null)
                return NoContent();
            var relativePath = fileService.GetUrl(fileInfo);
            return PhysicalFile(Path.GetFullPath(relativePath), "application/octet-stream", fileInfo.Name);
        }
    }
}