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

namespace ladaexpress.vn.Infrastructures.Services.Seo
{
    /// <summary>
    /// Interface cho Structured Data Service - Tạo JSON-LD markup
    /// </summary>
    public interface IStructuredDataService
    {
        /// <summary>
        /// Tạo Organization schema cho trang chủ
        /// </summary>
        /// <returns></returns>
        string GenerateOrganizationSchema();

        /// <summary>
        /// Tạo Website schema với search action
        /// </summary>
        /// <returns></returns>
        string GenerateWebsiteSchema();

        /// <summary>
        /// Tạo Article schema cho bài viết
        /// </summary>
        /// <param name="article">Article schema model</param>
        /// <returns></returns>
        string GenerateArticleSchema(ArticleSchema article);

        /// <summary>
        /// Tạo Product schema cho sản phẩm/dịch vụ
        /// </summary>
        /// <param name="product">Product schema model</param>
        /// <returns></returns>
        string GenerateProductSchema(ProductSchema product);

        /// <summary>
        /// Tạo BreadcrumbList schema
        /// </summary>
        /// <param name="breadcrumbs">Danh sách breadcrumb items</param>
        /// <returns></returns>
        string GenerateBreadcrumbSchema(List<BreadcrumbItem> breadcrumbs);

        /// <summary>
        /// Tạo FAQ schema
        /// </summary>
        /// <param name="faq">FAQ schema model</param>
        /// <returns></returns>
        string GenerateFAQSchema(FAQPageSchema faq);

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

        /// <summary>
        /// Tạo Article structured data cho tin tức/bài viết
        /// </summary>
        /// <param name="postId">ID bài viết</param>
        /// <param name="title">Tiêu đề</param>
        /// <param name="description">Mô tả</param>
        /// <param name="image">Hình ảnh</param>
        /// <param name="url">URL</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>
        /// <returns></returns>
        Task<string> GetArticleStructuredDataAsync(int postId, string title, string description, string image, string url,
            string author, DateTime publishedDate, DateTime? modifiedDate = null);

        /// <summary>
        /// Tạo CollectionPage structured data 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ả</param>
        /// <param name="url">URL</param>
        /// <param name="totalItems">Số lượng items (optional)</param>
        /// <returns></returns>
        Task<string> GetCollectionPageStructuredDataAsync(int categoryId, string name, string description, string url, int? totalItems = null);

        /// <summary>
        /// Tạo BreadcrumbList structured data
        /// </summary>
        /// <param name="breadcrumbItems">Danh sách breadcrumb items</param>
        /// <returns></returns>
        Task<string> GetBreadcrumbStructuredDataAsync(List<BreadcrumbItem> breadcrumbItems);

        /// <summary>
        /// Tạo FAQ structured data
        /// </summary>
        /// <param name="faqItems">Danh sách FAQ items</param>
        /// <returns></returns>
        Task<string> GetFAQStructuredDataAsync(List<FAQItem> faqItems);

        /// <summary>
        /// Tạo JobPosting structured data cho trang tuyển dụng
        /// </summary>
        /// <param name="jobId">ID công việc</param>
        /// <param name="title">Tiêu đề công việc</param>
        /// <param name="description">Mô tả công việc</param>
        /// <param name="workingAddress">Địa chỉ làm việc</param>
        /// <param name="minSalary">Lương tối thiểu</param>
        /// <param name="maxSalary">Lương tối đa</param>
        /// <param name="currency">Đơn vị tiền tệ</param>
        /// <param name="employmentType">Loại hình công việc</param>
        /// <param name="datePosted">Ngày đăng</param>
        /// <param name="validThrough">Hạn nộp hồ sơ</param>
        /// <param name="url">URL trang tuyển dụng</param>
        /// <returns></returns>
        Task<string> GetJobPostingStructuredDataAsync(
            int jobId,
            string title,
            string description,
            string workingAddress,
            decimal? minSalary = null,
            decimal? maxSalary = null,
            string currency = "VND",
            string employmentType = "FULL_TIME",
            DateTime? datePosted = null,
            DateTime? validThrough = null,
            string url = "");

        /// <summary>
        /// Combine multiple schemas into one JSON-LD
        /// </summary>
        /// <param name="schemas">Danh sách JSON schemas</param>
        /// <returns></returns>
        string CombineSchemas(params string[] schemas);
    }
}