using System;
using System.IO;
using API.Entities.Enums;
using API.Entities.Interfaces;
namespace API.Entities;
///
/// Represents a wrapper to the underlying file. This provides information around file, like number of pages, format, etc.
///
public class MangaFile : IEntityDate
{
public int Id { get; set; }
///
/// The filename without extension
///
public string FileName { get; set; }
///
/// Absolute path to the archive file
///
public required string FilePath { get; set; }
///
/// Number of pages for the given file
///
public int Pages { get; set; }
public MangaFormat Format { get; set; }
///
/// How many bytes make up this file
///
public long Bytes { get; set; }
///
/// File extension
///
public string? Extension { get; set; }
///
public DateTime Created { get; set; }
///
/// Last time underlying file was modified
///
/// This gets updated anytime the file is scanned
public DateTime LastModified { get; set; }
public DateTime CreatedUtc { get; set; }
public DateTime LastModifiedUtc { get; set; }
///
/// Last time file analysis ran on this file
///
public DateTime LastFileAnalysis { get; set; }
public DateTime LastFileAnalysisUtc { get; set; }
// Relationship Mapping
public Chapter Chapter { get; set; } = null!;
public int ChapterId { get; set; }
///
/// Updates the Last Modified time of the underlying file to the LastWriteTime
///
public void UpdateLastModified()
{
if (FilePath == null) return;
LastModified = File.GetLastWriteTime(FilePath);
LastModifiedUtc = File.GetLastWriteTimeUtc(FilePath);
}
public void UpdateLastFileAnalysis()
{
LastFileAnalysis = DateTime.Now;
LastFileAnalysisUtc = DateTime.UtcNow;
}
}