#!/usr/bin/env python3
import sys
import os


def scan_fat16_sectors(device_path):
    if not os.path.exists(device_path):
        print(f"Fehler: Gerät '{device_path}' wurde nicht gefunden.")
        sys.exit(1)

    print(f"Scanne Datenträger '{device_path}' nach FAT16-Bootsektoren...\n")
    print(f"{'Sektor':>10} | {'Offset (Bytes)':>15} | {'Offset (MiB)':>12}")
    print("-" * 45)

    sec = 0
    found_count = 0
    chunk_size = 65536  # 64 KB Puffer für schnelle I/O

    try:
        with open(device_path, "rb") as f:
            while chunk := f.read(chunk_size):
                for i in range(0, len(chunk), 512):
                    sector_data = chunk[i:i+512]

                    # Validierung: 512 Bytes, Boot-Signatur 0x55AA und "FAT16"-String bei Byte 54-62
                    if (len(sector_data) == 512 and
                        sector_data[510:512] == b"\x55\xaa" and
                        b"FAT16" in sector_data[54:62]):

                        offset_bytes = sec * 512
                        offset_mib = offset_bytes / (1024 * 1024)
                        print(f"{sec:>10} | {offset_bytes:>15} | {offset_mib:>9.2f} MiB")
                        found_count += 1

                    sec += 1

    except PermissionError:
        print("\nFehler: Keine Leserechte! Bitte führe das Skript mit 'sudo' aus.")
        sys.exit(1)
    except Exception as e:
        print(f"\nFehler beim Lesen des Datenträgers: {e}")
        sys.exit(1)

    print("-" * 45)
    print(f"Scan abgeschlossen. {found_count} Bootsektor(en) gefunden.\n")


if __name__ == "__main__":
    if len(sys.argv) != 2 or sys.argv[1] in ["-h", "--help"]:
        print(f"Nutzung: sudo python3 {sys.argv[0]} /dev/sdX")
        sys.exit(1)

    scan_fat16_sectors(sys.argv[1])
