{ lib
, stdenv
, fetchurl
, cups
, autoPatchelfHook
}:

stdenv.mkDerivation (finalAttrs: {
  pname = "labelife-label-printer";
  version = "1.2.1";

  arch =
    if stdenv.hostPlatform.system == "x86_64-linux" then "x86_64"
    else if stdenv.hostPlatform.system == "i686-linux" then "i386"
      else throw "Unsupported system: ${stdenv.hostPlatform.system}";

  src = fetchurl {
    url = "https://oss.saas.aimocloud.com/saas/Lablife/bag/LabelPrinter-${finalAttrs.version}.tar.gz";
    hash = "sha256-twnIFMBMyEM3xGlsuk3763C3emz3mgpEnlfvnL0XRWw=";
  };

  nativeBuildInputs = [ autoPatchelfHook ];
  buildInputs = [ cups ];

  installPhase =
  ''
    runHook preInstall
    # Install the CUPS filter with executable permissions
    install -Dm755 ./${finalAttrs.arch}/rastertolabeltspl $out/lib/cups/filter/rastertolabeltspl

    # Install all PPD files with read and write permissions for owner, and read for group and others
    for ppd in ./ppds/*.ppd; do
      install -Dm644 $ppd $out/share/cups/model/label/$(basename $ppd)
    done
    runHook postInstall
  '';

  meta = {
    description = "CUPS driver for several Labelife-compatible thermal label printers";
    downloadPage = "https://labelife.net/#/chart";
    homepage = "https://labelife.net";
    license = lib.licenses.unfree;
    longDescription = ''
    Supported printer models include:
    - D520 & D520BT
    - PM-201
    - PM-241 & PM-241-BT
    - PM-246 & PM-246S

    Brands using Labelife drivers include:
    - Phomemo
    - Itari
    - Omezizy
    - Aimo
    '';
    maintainers = with lib.maintainers; [ daniel-fahey ];
    platforms = with lib; [ "i686-linux" "x86_64-linux" ];
    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
  };
})
