using System;
using System.IO;

namespace Streams_A
{
  class Program
  {
    static void Main(string[] args)
    {

      
      using (FileStream f = new FileStream("immagine.bmp", FileMode.Open, FileAccess.ReadWrite))
      {   
        Console.WriteLine(f.Length);
        Console.WriteLine($"Leggibile {f.CanRead}");
        Console.WriteLine($"Scrivibile {f.CanWrite}");
        Console.WriteLine($"Seekable {f.CanSeek}");
        Console.WriteLine($"Timeout {f.CanTimeout}");

        //string tipo_immagine = "";
        //byte[] buffer = new byte[2];
        //f.Read(buffer, 0, 2);
        //Console.WriteLine(System.Text.Encoding.UTF8.GetString(buffer, 0, 2));
        
        f.Seek(2, SeekOrigin.Current);
        byte[] dimensione_buffer = new byte[4];
        f.Read(dimensione_buffer, 0, 4);
        
        //if (BitConverter.IsLittleEndian)
        //  Array.Reverse(dimensione_buffer); //Little / Big Endian ??
        
        UInt32 dimensione = BitConverter.ToUInt32(dimensione_buffer, 0);
        Console.WriteLine($"Dimensione letta direttamente dal file: {dimensione}");

        f.Seek(-4, SeekOrigin.Current);
        f.Read(dimensione_buffer, 0, 4);
        dimensione = BitConverter.ToUInt32(dimensione_buffer, 0);
        Console.WriteLine($"Dimensione letta direttamente dal file: {dimensione}");

        f.Seek(0, SeekOrigin.Begin);
        byte[] buffWrite = new byte[2] {(byte)'F', (byte)'C' };
        f.Write(buffWrite);

        f.Seek(0, SeekOrigin.Begin);
        byte[] buffRead = new byte[2];
        f.Read(buffRead);
        Console.WriteLine(System.Text.Encoding.UTF8.GetString(buffRead, 0, 2));

        f.Seek(0, SeekOrigin.Begin);
        buffRead = new byte[100000];

        int byteAvanzatiDaLeggere = 100000;
        int byteLetti = 0;

        while(byteAvanzatiDaLeggere>0)
        {
          int letti = f.Read(buffRead, byteLetti, byteAvanzatiDaLeggere);
          Console.WriteLine(letti);

          if (letti == 0) break;
          byteLetti += letti;
          byteAvanzatiDaLeggere -= letti;
        }
      }
    }
  }
}