#!/usr/bin/env python3
"""Compute a Seamless checksum for a file and write a .CHECKSUM file."""

import argparse
import os
import sys

import seamless
from seamless import Checksum
from seamless.checksum.calculate_checksum import calculate_checksum


def _calculate_file_checksum(filename: str) -> str:
    with open(filename, "rb") as f:
        buffer = f.read()
    return calculate_checksum(buffer)


def _write_checksum(filename: str, checksum: str) -> None:
    checksum = Checksum(checksum)
    filename2 = filename
    if filename.endswith(".INDEX"):
        filename2 = os.path.splitext(filename)[0]
    with open(filename2 + ".CHECKSUM", "w") as f:
        f.write(checksum.hex() + "\n")


def _main(argv: list[str] | None = None) -> int:
    parser = argparse.ArgumentParser(
        prog="seamless-checksum-file",
        description="Write a .CHECKSUM file for a file (Seamless SHA-256)",
    )
    parser.add_argument("file", help="Path to the file to checksum")
    args = parser.parse_args(argv)

    try:
        checksum = _calculate_file_checksum(args.file)
        _write_checksum(args.file, checksum)
    except Exception as exc:
        print(f"Error: {exc}", file=sys.stderr)
        return 1
    return 0


def main(argv: list[str] | None = None) -> int:
    try:
        return _main(argv)
    finally:
        seamless.close()


if __name__ == "__main__":
    sys.exit(main())
