using ladaexpress.vn.Infrastructures.DTO.Models.Seo;

namespace ladaexpress.vn.Infrastructures.Services
{
    /// <summary>
    /// Service để tối ưu nội dung và meta data
    /// </summary>
    public interface IContentOptimizationService
    {
        /// <summary>
        /// Tạo meta title được tối ưu cho SEO
        /// </summary>
        /// <param name="baseTitle">Tiêu đề gốc</param>
        /// <param name="contentType">Loại nội dung (product, post, category, etc.)</param>
        /// <param name="keywords">Từ khóa chính (optional)</param>
        /// <returns>Meta title đã tối ưu</returns>
        Task<string> GenerateOptimizedTitleAsync(string baseTitle, string contentType, string? keywords = null);

        /// <summary>
        /// Tạo meta description được tối ưu
        /// </summary>
        /// <param name="content">Nội dung gốc</param>
        /// <param name="contentType">Loại nội dung</param>
        /// <param name="targetLength">Độ dài mục tiêu (default: 155)</param>
        /// <returns>Meta description đã tối ưu</returns>
        Task<string> GenerateOptimizedDescriptionAsync(string content, string contentType, int targetLength = 155);

        /// <summary>
        /// Tạo keywords từ nội dung
        /// </summary>
        /// <param name="title">Tiêu đề</param>
        /// <param name="content">Nội dung</param>
        /// <param name="maxKeywords">Số lượng keywords tối đa</param>
        /// <returns>Danh sách keywords</returns>
        Task<List<string>> ExtractKeywordsAsync(string title, string content, int maxKeywords = 10);

        /// <summary>
        /// Tối ưu nội dung cho SEO
        /// </summary>
        /// <param name="content">Nội dung HTML</param>
        /// <param name="targetKeywords">Từ khóa mục tiêu</param>
        /// <returns>Nội dung đã tối ưu</returns>
        Task<string> OptimizeContentAsync(string content, List<string>? targetKeywords = null);

        /// <summary>
        /// Kiểm tra chất lượng SEO của nội dung
        /// </summary>
        /// <param name="title">Tiêu đề</param>
        /// <param name="description">Mô tả</param>
        /// <param name="content">Nội dung</param>
        /// <param name="keywords">Từ khóa</param>
        /// <returns>Báo cáo chất lượng SEO</returns>
        Task<SeoQualityReport> AnalyzeSeoQualityAsync(string title, string description, string content, List<string>? keywords = null);

        /// <summary>
        /// Tạo alt text cho hình ảnh
        /// </summary>
        /// <param name="imageUrl">URL hình ảnh</param>
        /// <param name="context">Ngữ cảnh (title, description)</param>
        /// <param name="keywords">Từ khóa liên quan</param>
        /// <returns>Alt text được tối ưu</returns>
        Task<string> GenerateImageAltTextAsync(string imageUrl, string context, List<string>? keywords = null);

        /// <summary>
        /// Tạo reading time estimate
        /// </summary>
        /// <param name="content">Nội dung</param>
        /// <param name="wordsPerMinute">Tốc độ đọc (default: 200 từ/phút)</param>
        /// <returns>Thời gian đọc ước tính (phút)</returns>
        int CalculateReadingTime(string content, int wordsPerMinute = 200);

        /// <summary>
        /// Tạo content summary
        /// </summary>
        /// <param name="content">Nội dung đầy đủ</param>
        /// <param name="maxLength">Độ dài tối đa của summary</param>
        /// <returns>Tóm tắt nội dung</returns>
        Task<string> GenerateContentSummaryAsync(string content, int maxLength = 300);

        /// <summary>
        /// Validate content structure cho SEO
        /// </summary>
        /// <param name="content">Nội dung HTML</param>
        /// <returns>Danh sách lỗi và gợi ý</returns>
        List<string> ValidateContentStructure(string content);
    }

    /// <summary>
    /// Model báo cáo chất lượng SEO
    /// </summary>
    public class SeoQualityReport
    {
        public int Score { get; set; } // Điểm SEO từ 0-100
        public List<string> Strengths { get; set; } = new List<string>();
        public List<string> Weaknesses { get; set; } = new List<string>();
        public List<string> Suggestions { get; set; } = new List<string>();
        public Dictionary<string, object> Details { get; set; } = new Dictionary<string, object>();
    }
}