using FMSAdmin.Data;

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using FMSAdmin.Helpers;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Authorization;
using System;
using System.IO;

namespace FMSAdmin.Controllers {
    [ApiController]
    [ApiVersion("1")]
    [Route("api/[controller]")]
    public class ControlController : Controller {
        private readonly ILogger<ControlController> _logger;
        private readonly FMSContext _context;
        private readonly StorageHelper _storage;

        public ControlController(
            ILogger<ControlController> logger,
            FMSContext context,
            StorageHelper storage
            ) {
            _logger = logger;
            _context = context;
            _storage = storage;
        }

        [HttpPost]
        [Route("[action]")]
        public IActionResult Upload(IFormFile file) {
            var uploadFile = _storage.SaveTemp(file);

            return Ok(uploadFile);
        }

        [HttpPost]
        [Route("[action]")]
        public IActionResult UploadImage(IFormFile file) {
            var uploadFile = _storage.SaveTempImage(file);

            return Ok(uploadFile);
        }

        /// <summary>
        /// 웹에디터 업로드
        /// </summary>
        [HttpPost]
        [Route("[action]")]
        public IActionResult FroalaImageUpload(IFormFile file) {
            var today = DateTime.Now.ToString("yyyy-MM-dd");
            _storage.CreateDirectory($"/editor/{today}");

            // 파일명 중복처리
            var filename = file.FileName;
            var ext = Path.GetExtension(filename);
            var name = Path.GetFileNameWithoutExtension(filename);
            var filePath = $"/editor/{today}/{filename}";
            var count = 0;
            while (_storage.FileExists(filePath)) {
                filename = name + ("(" + (count + 1) + ")") + (ext.Length > 0 ? ext : "");
                filePath = $"/editor/{today}/{filename}";
                _logger.LogInformation("filePath:" + filePath);
                count++;
            }

            var uploadFile = _storage.SaveImage(filePath, file);

            return Ok(new {
                link = uploadFile.Url
            });
        }

    }
}