// /***************************************************************************
// Aaru Data Preservation Suite
// ----------------------------------------------------------------------------
//
// Filename       : LS120.cs
// Author(s)      : Natalia Portillo <claunia@claunia.com>
//
// Component      : Aaru unit testing.
//
// --[ License ] --------------------------------------------------------------
//
//     This program is free software: you can redistribute it and/or modify
//     it under the terms of the GNU General Public License as
//     published by the Free Software Foundation, either version 3 of the
//     License, or (at your option) any later version.
//
//     This program is distributed in the hope that it will be useful,
//     but WITHOUT ANY WARRANTY; without even the implied warranty of
//     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//     GNU General Public License for more details.
//
//     You should have received a copy of the GNU General Public License
//     along with this program.  If not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2026 Natalia Portillo
// ****************************************************************************/

using System;
using System.IO;
using Aaru.CommonTypes;
using Aaru.CommonTypes.Enums;
using Aaru.Filters;
using Aaru.Images;
using FluentAssertions;
using FluentAssertions.Execution;
using NUnit.Framework;

namespace Aaru.Tests.Devices;

[TestFixture]
public class Ls120
{
    readonly string[] _testFiles = ["ls120.bin.lz", "mf2dd.bin.lz", "mf2hd.bin.lz"];

    readonly MediaType[] _mediaTypes = [MediaType.LS120, MediaType.DOS_35_DS_DD_9, MediaType.DOS_35_HD];

    readonly ulong[] _sectors = [246528, 1440, 2880];

    readonly uint[] _sectorSize = [512, 512, 512];

    readonly string _dataFolder = Path.Combine(Consts.TestFilesRoot, "Device test dumps", "LS-120");

    [Test]
    public void Info()
    {
        Environment.CurrentDirectory = _dataFolder;

        using(new AssertionScope())
        {
            for(var i = 0; i < _testFiles.Length; i++)
            {
                var filter = new LZip();
                filter.Open(_testFiles[i]);

                var         image  = new ZZZRawImage();
                ErrorNumber opened = image.Open(filter);

                opened.Should().Be(ErrorNumber.NoError, string.Format(Localization.Open_0, _testFiles[i]));

                if(opened != ErrorNumber.NoError) continue;

                using(new AssertionScope())
                {
                    image.Info.Sectors.Should().Be(_sectors[i], string.Format(Localization.Sectors_0, _testFiles[i]));

                    image.Info.SectorSize.Should()
                         .Be(_sectorSize[i], string.Format(Localization.Sector_size_0, _testFiles[i]));

                    image.Info.MediaType.Should()
                         .Be(_mediaTypes[i], string.Format(Localization.Media_type_0, _testFiles[i]));
                }
            }
        }
    }
}