using System.IO;
using System.Text;
using Aaru.CommonTypes.Interfaces;
using Aaru.Helpers;
using Spectre.Console;
namespace Aaru.Archives;
public sealed partial class Amg
{
#region IArchive Members
///
public bool Identify(IFilter filter) => false;
/*
if(filter.DataForkLength < Marshal.SizeOf()) return false;
Stream stream = filter.GetDataForkStream();
stream.Position = 0;
byte[] hdr = new byte[Marshal.SizeOf()];
stream.ReadExactly(hdr, 0, hdr.Length);
ArcHeader header = Marshal.ByteArrayToStructureLittleEndian(hdr);
// Not a valid magic
return header.magic == ARC_MAGIC;
*/
///
public void GetInformation(IFilter filter, Encoding encoding, out string information)
{
encoding ??= Encoding.ASCII;
information = "";
if(filter.DataForkLength < Marshal.SizeOf()) return;
Stream stream = filter.GetDataForkStream();
stream.Position = 0;
var hdr = new byte[Marshal.SizeOf()];
stream.ReadExactly(hdr, 0, hdr.Length);
ArcHeader header = Marshal.ByteArrayToStructureLittleEndian(hdr);
// Not a valid magic
if(header.magic != ARC_MAGIC) return;
var sb = new StringBuilder();
sb.AppendLine(Localization.AMG_archive);
sb.AppendFormat(Localization.AMG_version_0_1, header.version >> 4, header.version & 0xF).AppendLine();
if(header.files > 0)
sb.AppendFormat(Localization.Archive_contains_0_files_for_1_bytes, header.files, header.size).AppendLine();
if(header.commentLength > 0)
{
var buffer = new byte[header.commentLength];
stream.ReadExactly(buffer, 0, buffer.Length);
sb.AppendLine(Localization.Archive_comment);
sb.AppendLine(Markup.Escape(StringHandlers.CToString(buffer, encoding)));
}
information = sb.ToString();
}
#endregion
}