using System.IO;
using AmorousModStudio.Core;
using System.IO.Compression;
using System.Security.Cryptography;
using System.Windows.Media;
using System.Windows.Media.Imaging;
class Program {
 [STAThread] static void Main(string[] args) {
  string fixture=args[0], root=Path.Combine(AppContext.BaseDirectory,"Пробы текстур с пробелами");Directory.CreateDirectory(root);
  byte[] raw=File.ReadAllBytes(fixture);using var compressed=new MemoryStream();using(var gzip=new GZipStream(compressed,CompressionLevel.SmallestSize,true))gzip.Write(raw);
  string source=Path.Combine(root,"Исходная кнопка.xnb");File.WriteAllBytes(source,compressed.ToArray());string before=Convert.ToHexString(SHA256.HashData(File.ReadAllBytes(source)));
  string png=TextureService.Export(source,Path.Combine(root,"Экспорт PNG"));Console.WriteLine("EXPORT PASS "+png);
  string output=Path.Combine(root,"Готовый мод","Кнопка.xnb");TextureService.Import(source,png,output);Console.WriteLine("IMPORT PASS "+output);
  if(File.ReadAllBytes(output)[0]!=0x1f)throw new Exception("gzip not retained");
  string again=TextureService.Export(output,Path.Combine(root,"Повторный PNG"));if(!File.ReadAllBytes(png).SequenceEqual(File.ReadAllBytes(again)))throw new Exception("PNG bytes differ");
  var bad=BitmapSource.Create(1,1,96,96,PixelFormats.Bgra32,null,new byte[]{0,0,0,255},4);var encoder=new PngBitmapEncoder();encoder.Frames.Add(BitmapFrame.Create(bad));string badPng=Path.Combine(root,"wrong.png");using(var file=File.Create(badPng))encoder.Save(file);
  bool rejected=false;try{TextureService.Import(source,badPng,Path.Combine(root,"bad.xnb"));}catch(InvalidDataException){rejected=true;}if(!rejected||File.Exists(Path.Combine(root,"bad.xnb")))throw new Exception("wrong dimensions accepted");
  if(before!=Convert.ToHexString(SHA256.HashData(File.ReadAllBytes(source))))throw new Exception("Original mutated");Console.WriteLine("PASS Unicode/spaces+outergzip+PNG roundtrip+dimension rejection+original unchanged");
 }
}
