using IRaCIS.Core.Application.Contracts.Dicom;
using IRaCIS.Core.Application.Contracts.Dicom.DTO;
using IRaCIS.Core.Application.Contracts.RequestAndResponse;
using IRaCIS.Core.Application.Dicom;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Net.Http;

namespace IRaCIS.Api.Controllers
{
    /// <summary>
    /// Series
    /// </summary>
    [Route("series")]
    [ApiController, Authorize, ApiExplorerSettings(GroupName = "Image")]
    public class SeriesController : ControllerBase
    {
        private readonly IDicomArchiveService _dicomArchiveService;
        public SeriesController(IDicomArchiveService dicomArchiveService)
        {
            _dicomArchiveService = dicomArchiveService;
        }


        ///// <summary> 指定资源Id,获取Dicom检查所属序列信息列表 </summary>
        ///// <param name="studyId"> Dicom检查的Id </param>
        //[HttpGet, Route("list/{studyId:guid}")]
        //[AllowAnonymous]
        //public IEnumerable<DicomSeriesDTO> GetSeriesList(Guid studyId)
        //{
        //    return _dicomArchiveService.GetSeriesList(studyId);
        //}


        /// <summary> 指定资源Id,获取Dicom检查所属序列信息列表 </summary>
        /// <param name="studyId"> Dicom检查的Id </param>
        /// <param name="tpCode"></param>
        [HttpGet, Route("serieslist/{studyId:guid}")]
        [AllowAnonymous]
        public IResponseOutput<IEnumerable<DicomSeriesWithLabelDTO>> GetSeriesList(Guid studyId,string tpCode)
        {
            return ResponseOutput.Ok( _dicomArchiveService.GetSeriesWithLabelList(studyId, tpCode));
        }


        [HttpGet, Route("list/{studyId:guid}/{tpCode?}")]
        [AllowAnonymous]
        public IEnumerable<DicomSeriesWithLabelDTO> GetSeriesWithLabelList(Guid studyId, string tpCode)
        {
            return _dicomArchiveService.GetSeriesWithLabelList(studyId, tpCode);
        }


        /// <summary> 指定资源Id,渲染Dicom序列的Jpeg预览图像 </summary>
        /// <param name="seriesId"> Dicom序列的Id </param>
        [HttpGet, Route("preview/{seriesId:guid}")]
        [AllowAnonymous]
        public FileContentResult GetSeriesPreview(Guid seriesId)
        {
            string path = _dicomArchiveService.GetSeriesPreview(seriesId);
            using (var sw = DicomRenderingHelper.RenderPreviewJpeg(path))
            {
                var bytes = new byte[sw.Length];
                sw.Read(bytes, 0, bytes.Length);
                sw.Close();
                return new FileContentResult(bytes, "image/jpeg");
            }
        }
    }
}