<?php

class FormularioService
{
    public static function getTipos()
    {
        return [
            'TText' => 'Texto multiplas linhas',
            'TDate' => 'Data',
            'THtmlEditor' => 'Texto estilizado',
            'TSpinner' => 'Números interios',
            'TEntry' => 'Texto simples',
            'TRadioGroup' => 'Seleção única',
            'TCheckGroup' => 'Seleção múltipla',
            'TCombo' => 'Escolha única',
            'TNumeric' => 'Números decimais'
        ];
    }
    
    public static function needOptions($id)
    {
        return in_array($id, ['TRadioGroup', 'TCheckGroup', 'TCombo']);
    }
    
    public static function getOptions(Questao $questao)
    {
        $options =  explode(';', $questao->opcoes);
        
        $items = [];
        
        foreach ($options as $option)
        {
            $items[$option] = $option;
        }
            
        return $items;
    }
    
    public static function getField(Questao $questao, Resposta $resposta = NULL)
    {
        $name = 'questao_'.$questao->id;
        
        $field =  ($questao->tipo_campo == 'TNumeric') ? new $questao->tipo_campo($name, 2, ',', '.') : new $questao->tipo_campo($name);
        
        if ($resposta)
        {
            if ($questao->tipo_campo === 'TCheckGroup')
            {
                $field->setValue(explode(',', $resposta->resposta));
            }
            else
            {
                $field->setValue($resposta->resposta);
            }
        }
        
        if ($questao->tipo_campo === 'TDate')
        {
            $field->setDatabaseMask('yyyy-mm-dd');
            $field->setMask('dd/mm/yyyy');
        }
        else if (in_array($questao->tipo_campo, ['TRadioGroup', 'TCheckGroup']))
        {
            $field->setUseButton(TRUE);
            $field->setLayout('horizontal');
        }
        else if (in_array($questao->tipo_campo, ['THtmlEditor', 'TText']))
        {
            $field->setSize('100%', 250);
        }
        else
        {
            $field->setSize('100%');
        }
        
        if (self::needOptions($questao->tipo_campo))
        {
            $field->addItems(self::getOptions($questao));
        }
        
        return $field;
    }
    
    public static function getLabel(Questao $questao)
    {
        $color =  $questao->fl_obrigatorio == 'S' ? 'red' : null;
        
        return new TLabel($questao->nome, $color, null, null, '100%');
    }
}
