%% Tareas Estilosas
%% Felipe Portales-Oliva (f.portales.oliva@gmail.com)
%% 
%% Clase para crear respuestas a tareas de manera sencilla

\NeedsTeXFormat{LaTeX2e} % we need to have LaTeX2e for this to compile
\ProvidesClass{fphw}[2019/03/19 LaTeX class to deliver your homework]

% We will use the article class as a template, with a fontsize of 11pt
\LoadClassWithOptions{article}[]

% UTF-8 is best coding
\RequirePackage[utf8]{inputenc}

% We won't need those ugly margins
\RequirePackage{geometry}

% we will modify sections, subsections and sub subsections
\RequirePackage{titlesec}

% Header and footers, we will use the titles also
\RequirePackage{fancyhdr,titling}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% We define the macro for the name of the professor
\newcommand{\professor}[1]{ \renewcommand{\professor}{#1} }

% We define the macro for the name of the class
\newcommand{\class}[1]{ \renewcommand{\class}{#1} }

% We define the macro for the name of the institution
\newcommand{\institute}[1]{ \renewcommand{\institute}{#1} }

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Redefine the title for the class
\renewcommand{\maketitle}{%
    \thispagestyle{plain}
    \begin{center}
        {\scshape \institute} \\[10pt]
        \hrule
        \vspace{10pt}
        {\LARGE \bfseries \@title} \\[5pt]
        Student name: {\itshape \@author}
        \vspace{8pt}
        \hrule
        \vspace{10pt}
        Course: {\itshape\class} -- Professor: {\itshape\professor} 
        \\
        Due date: {\itshape\@date}
        \vspace{20pt}
    \end{center}
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Modification of section 
\titleformat{\section}[block]{\normalsize\bfseries\filcenter}{\thesection.}{.3cm}{} 

% modification of subsection and sub sub section
\titleformat{\subsection}[runin]{\bfseries}{ \thesubsection.}
{1mm}{}[.\quad]
\titleformat{\subsubsection}[runin]{\bfseries\itshape}{ \thesubsubsection.}
{1mm}{}[.\quad]

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%% set margins for the document
% Narrow
\DeclareOption{narrow}{\geometry{left=1.5cm,right=1.5cm,top=2.5cm,bottom=2.5cm}}
% Standard
\DeclareOption{standard}{\geometry{left=2.5cm,right=2.5cm,top=2.5cm,bottom=2.5cm}}

% two columns are really difficult to grade, this is to avoid them
\DeclareOption{twocolumn}{\OptionNotUsed}

% the user can put their name on the header and footers along other info
\DeclareOption{decorate}{  
    % clear all data
    \fancyhead{}
    \fancyfoot{}
    \pagestyle{fancy}
    \renewcommand{\headrulewidth}{0.4pt} % we want rules 
    \renewcommand{\footrulewidth}{0.4pt}
    \fancyhead[RO] {\footnotesize\thepage}
    \fancyhead[LO] {\footnotesize\itshape\class{} -- \makeatletter\@title\makeatother }
    \fancyfoot[RO] {\footnotesize\itshape\theauthor}
}

% As we loaded the article class we need to pass it options not specifically 
% defined, such as font size
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}

% This is the point when we pass the options
\ProcessOptions\relax


% we finish the class
\endinput
