\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{printcolormanager}[2026/05/23 v1.0 Automated print color manager]

% ---------------------------------------------------------
% Alap csomagok
% ---------------------------------------------------------
\RequirePackage{xkeyval}
\RequirePackage{xfp}

% ---------------------------------------------------------
% Belső kapcsolók
% ---------------------------------------------------------
\newif\ifpcm@lab
\pcm@labfalse

% A GRAY modell egész skálája.
% Ha 255 kell, maradjon 255.
\def\rangeGray{255}

% Alapértelmezett célmodell
\def\pcm@targetmodel{natural}

% ---------------------------------------------------------
% Csomagopciók
% ---------------------------------------------------------
\DeclareOptionX{gray}{\def\pcm@targetmodel{gray}}
\DeclareOptionX{GRAY}{\def\pcm@targetmodel{Gray}}
\DeclareOptionX{CMYK}{\def\pcm@targetmodel{cmyk}}
\DeclareOptionX{cmyk}{\def\pcm@targetmodel{cmyk}}
\DeclareOptionX{RGB}{\def\pcm@targetmodel{RGB}}
\DeclareOptionX{rgb}{\def\pcm@targetmodel{RGB}}
\DeclareOptionX{HSB}{\def\pcm@targetmodel{HSB}}

% A Lab jelenleg publikus opcióként elfogadott,
% de natív Lab kimenet helyett RGB fallbackot használ.
\DeclareOptionX{Lab}{%
  \pcm@labtrue
  \def\pcm@targetmodel{RGB}%
}

\ProcessOptionsX\relax

% ---------------------------------------------------------
% xcolor betöltése a kiválasztott célmodellel
% ---------------------------------------------------------
\PassOptionsToPackage{\pcm@targetmodel}{xcolor}
\RequirePackage{xcolor}

% ---------------------------------------------------------
% Előre definiált feketék
% ---------------------------------------------------------
\definecolor{PureBlack}{cmyk}{0.0,0.0,0.0,1.0}
\definecolor{RichBlack}{cmyk}{0.40,0.0,0.0,1.0}

% ---------------------------------------------------------
% Belső összehasonlító makrók
% ---------------------------------------------------------
\def\pcm@model@natural{natural}
\def\pcm@model@gray{gray}
\def\pcm@model@Gray{Gray}
\def\pcm@model@cmyk{cmyk}
\def\pcm@model@RGB{RGB}
\def\pcm@model@HSB{HSB}

% ---------------------------------------------------------
% Segédmakró: 0.0-1.0 GRAY értékből egész Gray érték
% Példa: 0.55 -> 140, ha \rangeGray = 255
% ---------------------------------------------------------
\newcommand{\pcm@graydecimaltointeger}[1]{%
  \fpeval{round((#1)*\rangeGray,0)}%
}

% ---------------------------------------------------------
% 6 paraméteres színdefiníció
%
% Szintaktika:
% \definePrintColor{Name}{RGB}{CMYK}{GRAY}{HSB}{Lab}
%
% #1 = név
% #2 = RGB  pl. 210,40,40
% #3 = CMYK pl. 0.05,0.95,0.90,0.0
% #4 = gray pl. 0.55  (0.0-1.0 skála)
% #5 = HSB  pl. 0,80,80
% #6 = Lab  pl. 50,65,45
%
% Megjegyzés:
% - gray célmodell esetén #4 közvetlenül megy a gray modellbe
% - GRAY célmodell esetén #4-ből egész Gray értéket számolunk
% - Lab célmodell kérésére jelenleg RGB fallback történik
% ---------------------------------------------------------
\newcommand{\definePrintColor}[6]{%
  \ifx\pcm@targetmodel\pcm@model@gray
    \definecolor{#1}{gray}{#4}%
  \else
    \ifx\pcm@targetmodel\pcm@model@Gray
      \definecolor{#1}{Gray}{\pcm@graydecimaltointeger{#4}}%
    \else
      \ifx\pcm@targetmodel\pcm@model@cmyk
        \definecolor{#1}{cmyk}{#3}%
      \else
        \ifx\pcm@targetmodel\pcm@model@RGB
          \ifpcm@lab
            \PackageWarning{printColorManager}{%
              Lab mode requested for color `#1', but native Lab output is not implemented yet; RGB fallback is used%
            }%
          \fi
          \definecolor{#1}{RGB}{#2}%
        \else
          \ifx\pcm@targetmodel\pcm@model@HSB
            \definecolor{#1}{HSB}{#5}%
          \else
            % Ha nincs opció vagy ismeretlen állapot van,
            % akkor RGB legyen az alap fallback.
            \definecolor{#1}{RGB}{#2}%
          \fi
        \fi
      \fi
    \fi
  \fi
}

\endinput
