\ProvidesClass{twentysecondcv}[2017/01/08 CV class]
\LoadClass{article}
\NeedsTeXFormat{LaTeX2e}

%-------------------------------------------------------------------------------
% REQUIRED PACKAGES
%-------------------------------------------------------------------------------

\RequirePackage[sfdefault]{ClearSans}
\RequirePackage[T1]{fontenc}
\RequirePackage{tikz}
\RequirePackage{xcolor}
\RequirePackage[absolute,overlay]{textpos}
\RequirePackage{ragged2e}
\RequirePackage{etoolbox}
\RequirePackage{ifmtarg}
\RequirePackage{ifthen}
\RequirePackage{pgffor}
\RequirePackage{marvosym}
\RequirePackage{parskip}

\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions\relax

%-------------------------------------------------------------------------------
% COLOURS
%-------------------------------------------------------------------------------

\definecolor{white}{RGB}{255,255,255}
\definecolor{gray}{HTML}{4D4D4D}
\definecolor{sidecolor}{HTML}{E7E7E7}
\definecolor{mainblue}{HTML}{0E5484}
\definecolor{maingray}{HTML}{B9B9B9}

%-------------------------------------------------------------------------------
% MISC CONFIGURATIONS
%-------------------------------------------------------------------------------

\renewcommand{\bfseries}{\color{gray}} % Make \textbf produce coloured text instead

\pagestyle{empty} % Disable headers and footers

\setlength{\parindent}{0pt} % Disable paragraph indentation

%-------------------------------------------------------------------------------
% SIDEBAR DEFINITIONS
%-------------------------------------------------------------------------------

\setlength{\TPHorizModule}{1cm} % Left margin
\setlength{\TPVertModule}{1cm} % Top margin

\newlength\imagewidth
\newlength\imagescale
\pgfmathsetlength{\imagewidth}{5cm}
\pgfmathsetlength{\imagescale}{\imagewidth/600}

% Define a new length to hold the remaining line width after the section title is printed
\newlength{\TotalSectionLength}
% Define a new length to hold the width of the section title
\newlength{\SectionTitleLength}
\newcommand{\profilesection}[1]{
    % Set the total line width
    \setlength\TotalSectionLength{\linewidth}
        % Calculate the width of the section title
        \settowidth{\SectionTitleLength}{\huge #1 }
        % Subtract the section title width from the total width
        \addtolength\TotalSectionLength{-\SectionTitleLength}
        % Modifier to remove overfull box warning
        \addtolength\TotalSectionLength{-2.22221pt}
        % Whitespace before the section title
        \vspace{8pt}
        % Print the title and auto-width rule
        {\color{black!80} \huge #1 \rule[0.15\baselineskip]{\TotalSectionLength}{1pt}}
}

% Define custom commands for CV info
\newcommand{\cvdate}[1]{\renewcommand{\cvdate}{#1}}
\newcommand{\cvmail}[1]{\renewcommand{\cvmail}{#1}}
\newcommand{\cvnumberphone}[1]{\renewcommand{\cvnumberphone}{#1}}
\newcommand{\cvaddress}[1]{\renewcommand{\cvaddress}{#1}}
\newcommand{\cvsite}[1]{\renewcommand{\cvsite}{#1}}
\newcommand{\aboutme}[1]{\renewcommand{\aboutme}{#1}}
\newcommand{\profilepic}[1]{\renewcommand{\profilepic}{#1}}
\newcommand{\cvname}[1]{\renewcommand{\cvname}{#1}}
\newcommand{\cvjobtitle}[1]{\renewcommand{\cvjobtitle}{#1}}

% Command for printing the contact information icons
\newcommand*\icon[1]{\tikz[baseline=(char.base)]{\node[shape=circle,draw,inner sep=1pt, fill=mainblue,mainblue,text=white] (char) {#1};}}

% Command for printing skill progress bars
\newcommand\skills[1]{
    \renewcommand{\skills}{
        \begin{tikzpicture}
        \foreach [count=\i] \x/\y in {#1}{
            \draw[fill=maingray,maingray] (0,\i) rectangle (6,\i+0.4);
            \draw[fill=white,mainblue](0,\i) rectangle (\y,\i+0.4);
            \node [above right] at (0,\i+0.4) {\x};
        }
        \end{tikzpicture}
    }
}

% Command for printing skills text
\newcommand\skillstext[1]{
    \renewcommand{\skillstext}{
        \begin{flushleft}
        \foreach [count=\i] \x/\y in {#1}{
            \x$ \star $\y
        }
        \end{flushleft}
    }
}

%-------------------------------------------------------------------------------
% SIDEBAR LAYOUT
%-------------------------------------------------------------------------------

\newcommand{\makeprofile}{
    \begin{tikzpicture}[remember picture,overlay]
        \node [rectangle, fill=sidecolor, anchor=north, minimum width=9cm, minimum height=\paperheight+1cm] (box) at (-5cm,0.5cm){};
    \end{tikzpicture}

    %------------------------------------------------

        \begin{textblock}{6}(0.5, 0.2)

        %------------------------------------------------

        \ifthenelse{\equal{\profilepic}{}}{}{
            \begin{center}
            \begin{tikzpicture}[x=\imagescale,y=-\imagescale]
                \clip (600/2, 567/2) circle (567/2);
            \node[anchor=north west, inner sep=0pt, outer sep=0pt] at (0,0) {\includegraphics[width=\imagewidth]{\profilepic}};
            \end{tikzpicture}
            \end{center}
        }

    %------------------------------------------------

    {\Huge\color{mainblue}\cvname}

    %------------------------------------------------

    {\Large\color{black!80}\cvjobtitle}

    %------------------------------------------------

    \renewcommand{\arraystretch}{1.6}
    \begin{tabular}{p{0.5cm} @{\hskip 0.5cm}p{5cm}}
    \ifthenelse{\equal{\cvdate}{}}{}{\textsc{\Large\icon{\Info}} & \cvdate\\}
    \ifthenelse{\equal{\cvaddress}{}}{}{\textsc{\Large\icon{\Letter}} & \cvaddress\\}
    \ifthenelse{\equal{\cvnumberphone}{}}{}{\textsc{\Large\icon{\Telefon}} & \cvnumberphone\\}
    \ifthenelse{\equal{\cvsite}{}}{}{\textsc{\Large\icon{\Mundus}} & \href{\cvsite}{\cvsite}\\}
    \ifthenelse{\equal{\cvmail}{}}{}{\textsc{\large\icon{@}} & \href{mailto:\cvmail}{\cvmail}}
    \end{tabular}

    %------------------------------------------------

        \ifthenelse{\equal{\aboutme}{}}{}{
            \profilesection{About me}
            \begin{flushleft}
            \aboutme
                \end{flushleft}
        }

    %------------------------------------------------

        \profilesection{Skills}

    \skills
        \skillstext
        \scriptsize
        (*)[The skill scale is from 0 (Fundamental Awareness) to 6 (Expert).]

        %------------------------------------------------

        \end{textblock}
}

%-------------------------------------------------------------------------------
% COLOURED SECTION TITLE BOX
%-------------------------------------------------------------------------------

% Command to create the rounded boxes around the first three letters of section titles
\newcommand*\round[2]{%
    \tikz[baseline=(char.base)]\node[anchor=north west, draw,rectangle, rounded corners, inner sep=1.6pt, minimum size=5.5mm, text height=3.6mm, fill=#2,#2,text=white](char){#1};%
}

\newcounter{colorCounter}
\newcommand{\sectioncolor}[1]{%
    {%
        \round{#1}{
            \ifcase\value{colorCounter}%
                maingray\or%
                mainblue\or%
                maingray\or%
                mainblue\or%
                maingray\or%
                mainblue\or%
                maingray\or%
                mainblue\or%
                maingray\or%
                mainblue\else%
                maingray\fi%
        }%
    }%
    \stepcounter{colorCounter}%
}

\renewcommand{\section}[1]{
    {%
        \color{gray}%
            \Large\sectioncolor{#1}%
    }
}

\renewcommand{\subsection}[1]{
    \par\vspace{.5\parskip}{%
        \large\color{gray} #1%
    }
    \par\vspace{.25\parskip}%
}

%-------------------------------------------------------------------------------
% LONG LIST ENVIRONMENT
%-------------------------------------------------------------------------------

\setlength{\tabcolsep}{0pt}

% New environment for the long list
\newenvironment{twenty}{%
    \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}ll}
}{%
    \end{tabular*}
}

\newcommand{\twentyitem}[4]{%
#1&\parbox[t]{0.83\textwidth}{%
    \textbf{#2}%
        \hfill%
        {\footnotesize#3}\\%
#4\vspace{\parsep}%
}\\
        }

%-------------------------------------------------------------------------------
% SMALL LIST ENVIRONMENT
%-------------------------------------------------------------------------------

\setlength{\tabcolsep}{0pt}

% New environment for the small list
\newenvironment{twentyshort}{%
    \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}ll}
}{%
    \end{tabular*}
}

\newcommand{\twentyitemshort}[2]{%
#1&\parbox[t]{0.83\textwidth}{%
    \textbf{#2}%
}\\
        }

%-------------------------------------------------------------------------------
% MARGINS AND LINKS
%-------------------------------------------------------------------------------

\RequirePackage[left=7.6cm,top=0.1cm,right=1cm,bottom=0.2cm,nohead,nofoot]{geometry}

\RequirePackage{hyperref}
