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

namespace ladaexpress.vn.Infrastructures.Services.Seo
{
    /// <summary>
    /// Interface cho SEO Service
    /// </summary>
    public interface ISeoService
    {
        /// <summary>
        /// Tạo SEO model mặc định cho trang chủ
        /// </summary>
        /// <returns></returns>
        Task<SeoModel> GetHomePageSeoAsync();

        Task<SeoModel> GetProductIndexSeoAsync();
        Task<SeoModel> GetJobPostIndexSeoAsync();

        /// <summary>
        /// Tạo SEO model cho trang bài viết
        /// </summary>
        /// <param name="postId">ID bài viết</param>
        /// <param name="title">Tiêu đề bài viết</param>
        /// <param name="description">Mô tả ngắn</param>
        /// <param name="image">Hình ảnh</param>
        /// <param name="url">URL bài viết</param>
        /// <param name="author">Tác giả</param>
        /// <param name="publishedDate">Ngày xuất bản</param>
        /// <param name="modifiedDate">Ngày chỉnh sửa</param>
        /// <param name="keywords">Từ khóa</param>
        /// <returns></returns>
        Task<SeoModel> GetArticleSeoAsync(int postId, string title, string description, string image, string url,
            string author, DateTime publishedDate, DateTime? modifiedDate = null, List<string>? keywords = null);

        /// <summary>
        /// Tạo SEO model cho trang sản phẩm/dịch vụ
        /// </summary>
        /// <param name="productId">ID sản phẩm</param>
        /// <param name="name">Tên sản phẩm</param>
        /// <param name="description">Mô tả sản phẩm</param>
        /// <param name="image">Hình ảnh</param>
        /// <param name="url">URL sản phẩm</param>
        /// <param name="price">Giá (optional)</param>
        /// <returns></returns>
        Task<SeoModel> GetProductSeoAsync(int productId, string name, string description, string image, string url, decimal? price = null);

        /// <summary>
        /// Tạo SEO model cho trang danh mục
        /// </summary>
        /// <param name="categoryId">ID danh mục</param>
        /// <param name="name">Tên danh mục</param>
        /// <param name="description">Mô tả danh mục</param>
        /// <param name="url">URL danh mục</param>
        /// <returns></returns>
        Task<SeoModel> GetCategorySeoAsync(int categoryId, string name, string description, string url);

        /// <summary>
        /// Tạo SEO model cho trang tag
        /// </summary>
        /// <param name="tagId">ID tag</param>
        /// <param name="name">Tên tag</param>
        /// <param name="url">URL tag</param>
        /// <returns></returns>
        Task<SeoModel> GetTagSeoAsync(int tagId, string name, string url);

        /// <summary>
        /// Tạo SEO model cho trang tìm kiếm
        /// </summary>
        /// <param name="query">Từ khóa tìm kiếm</param>
        /// <param name="url">URL trang tìm kiếm</param>
        /// <param name="hasResults">Có kết quả hay không</param>
        /// <param name="totalResults">Tổng số kết quả (optional)</param>
        /// <returns></returns>
        Task<SeoModel> GetSearchSeoAsync(string query, string url, bool hasResults, int? totalResults = null);

        /// <summary>
        /// Tạo SEO model tùy chỉnh
        /// </summary>
        /// <param name="title">Tiêu đề</param>
        /// <param name="description">Mô tả</param>
        /// <param name="url">URL</param>
        /// <param name="image">Hình ảnh</param>
        /// <param name="keywords">Từ khóa</param>
        /// <returns></returns>
        Task<SeoModel> GetCustomSeoAsync(string title, string description, string url, string? image = null, string? keywords = null);

        /// <summary>
        /// Tạo breadcrumb cho trang
        /// </summary>
        /// <param name="items">Danh sách breadcrumb items</param>
        /// <returns></returns>
        List<BreadcrumbItem> CreateBreadcrumbs(params (string name, string url)[] items);

        /// <summary>
        /// Validate SEO data
        /// </summary>
        /// <param name="seoModel">SEO model cần validate</param>
        /// <returns>Danh sách lỗi nếu có</returns>
        List<string> ValidateSeoModel(SeoModel seoModel);

        /// <summary>
        /// Tạo canonical URL
        /// </summary>
        /// <param name="path">Đường dẫn</param>
        /// <returns></returns>
        string CreateCanonicalUrl(string path);

        /// <summary>
        /// Tối ưu meta description
        /// </summary>
        /// <param name="text">Text gốc</param>
        /// <param name="maxLength">Độ dài tối đa (mặc định 155)</param>
        /// <returns></returns>
        string OptimizeMetaDescription(string text, int maxLength = 155);

        /// <summary>
        /// Tối ưu title tag
        /// </summary>
        /// <param name="title">Title gốc</param>
        /// <param name="maxLength">Độ dài tối đa (mặc định 60)</param>
        /// <returns></returns>
        string OptimizeTitle(string title, int maxLength = 60);
    }
}