using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace NexusReader.Domain.Entities;

/// <summary>
/// Represents an E-book uploaded or owned by a user.
/// </summary>
public class Ebook
{
    [Key]
    public Guid Id { get; set; } = Guid.NewGuid();

    [Required]
    [MaxLength(255)]
    public string Title { get; set; } = string.Empty;

    [Required]
    public int AuthorId { get; set; }

    [ForeignKey(nameof(AuthorId))]
    public virtual Author Author { get; set; } = null!;

    [Required]
    public string FilePath { get; set; } = string.Empty;

    public string? CoverUrl { get; set; }

    [Required]
    [MaxLength(128)]
    public string TenantId { get; set; } = "global";

    public DateTime AddedDate { get; set; } = DateTime.UtcNow;

    public DateTime? LastReadDate { get; set; }
    
    public double Progress { get; set; } = 0;

    [MaxLength(255)]
    public string? LastChapter { get; set; }

    public int LastChapterIndex { get; set; } = 0;
    
    public string? Description { get; set; }
    
    /// <summary>
    /// Gets or sets a value indicating whether the ebook has been processed by the AI ingestion engine
    /// and is ready for reading (Knowledge Units generated).
    /// </summary>
    public bool IsReadyForReading { get; set; } = false;

    // Relationship to NexusUser
    [Required]
    public string UserId { get; set; } = string.Empty;

    [ForeignKey(nameof(UserId))]
    public NexusUser? User { get; set; }
}
