#!/usr/bin/env python3
"""Compose a transparent crest over an image using ImageMagick."""

import argparse
import shutil
import subprocess
import sys
from pathlib import Path


def main() -> int:
    parser = argparse.ArgumentParser()
    parser.add_argument("input", type=Path)
    parser.add_argument("output", type=Path)
    parser.add_argument("crest", type=Path)
    parser.add_argument("--x", type=int)
    parser.add_argument("--y", type=int)
    parser.add_argument("--size", type=int, default=180)
    parser.add_argument("--bottom-margin", type=int, default=40)
    parser.add_argument("--dry-run", action="store_true")
    args = parser.parse_args()

    if shutil.which("magick") is None:
        print("magick nao encontrado", file=sys.stderr)
        return 2
    for path in (args.input, args.crest):
        if not path.is_file():
            print(f"arquivo nao encontrado: {path}", file=sys.stderr)
            return 2
    if args.size <= 0:
        print("--size deve ser positivo", file=sys.stderr)
        return 2

    identify = subprocess.run(
        ["magick", "identify", "-format", "%w %h", str(args.input)],
        check=True,
        capture_output=True,
        text=True,
    )
    width, height = map(int, identify.stdout.split())
    x = args.x if args.x is not None else (width - args.size) // 2
    y = args.y if args.y is not None else height - args.size - args.bottom_margin
    if x < 0 or y < 0 or x + args.size > width or y + args.size > height:
        print("brasao sai dos limites da imagem", file=sys.stderr)
        return 2

    command = [
        "magick", str(args.input), "(", str(args.crest), "-resize",
        f"{args.size}x{args.size}!", ")", "-geometry", f"+{x}+{y}",
        "-composite", "-strip", "-quality", "92", str(args.output),
    ]
    print(" ".join(command))
    if not args.dry_run:
        args.output.parent.mkdir(parents=True, exist_ok=True)
        subprocess.run(command, check=True)
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
