<?php

// --------------------------------------------------------------------
// App Namespace
// --------------------------------------------------------------------
// This defines the default Namespace that is used throughout
// CodeIgniter to refer to the Application directory. Change
// this constant to change the namespace that all application
// classes should use.
//
// NOTE: changing this will require manually modifying the
// existing namespaces of App\* namespaced-classes.
//
defined( 'APP_NAMESPACE' ) || define( 'APP_NAMESPACE', 'App' );

/*
 * |--------------------------------------------------------------------------
 * | Composer Path
 * |--------------------------------------------------------------------------
 * |
 * | The path that Composer's autoload file is expected to live. By default,
 * | the vendor folder is in the Root directory, but you can customize that here.
 */
defined( 'COMPOSER_PATH' ) || define( 'COMPOSER_PATH', ROOTPATH . 'vendor/autoload.php' );

/*
 * |--------------------------------------------------------------------------
 * | Timing Constants
 * |--------------------------------------------------------------------------
 * |
 * | Provide simple ways to work with the myriad of PHP functions that
 * | require information to be in seconds.
 */
defined( 'SECOND' ) || define( 'SECOND', 1 );
defined( 'MINUTE' ) || define( 'MINUTE', 60 );
defined( 'HOUR' ) || define( 'HOUR', 3600 );
defined( 'DAY' ) || define( 'DAY', 86400 );
defined( 'WEEK' ) || define( 'WEEK', 604800 );
defined( 'MONTH' ) || define( 'MONTH', 2592000 );
defined( 'YEAR' ) || define( 'YEAR', 31536000 );
defined( 'DECADE' ) || define( 'DECADE', 315360000 );

/*
 * |--------------------------------------------------------------------------
 * | Exit Status Codes
 * |--------------------------------------------------------------------------
 * |
 * | Used to indicate the conditions under which the script is exit()ing.
 * | While there is no universal standard for error codes, there are some
 * | broad conventions. Three such conventions are mentioned below, for
 * | those who wish to make use of them. The CodeIgniter defaults were
 * | chosen for the least overlap with these conventions, while still
 * | leaving room for others to be defined in future versions and user
 * | applications.
 * |
 * | The three main conventions used for determining exit status codes
 * | are as follows:
 * |
 * | Standard C/C++ Library (stdlibc):
 * | http://www.gnu.org/software/libc/manual/html_node/Exit-Status.html
 * | (This link also contains other GNU-specific conventions)
 * | BSD sysexits.h:
 * | http://www.gsp.com/cgi-bin/man.cgi?section=3&topic=sysexits
 * | Bash scripting:
 * | http://tldp.org/LDP/abs/html/exitcodes.html
 * |
 */
defined( 'EXIT_SUCCESS' ) || define( 'EXIT_SUCCESS', 0 ); // no errors
defined( 'EXIT_ERROR' ) || define( 'EXIT_ERROR', 1 ); // generic error
defined( 'EXIT_CONFIG' ) || define( 'EXIT_CONFIG', 3 ); // configuration error
defined( 'EXIT_UNKNOWN_FILE' ) || define( 'EXIT_UNKNOWN_FILE', 4 ); // file not found
defined( 'EXIT_UNKNOWN_CLASS' ) || define( 'EXIT_UNKNOWN_CLASS', 5 ); // unknown class
defined( 'EXIT_UNKNOWN_METHOD' ) || define( 'EXIT_UNKNOWN_METHOD', 6 ); // unknown class member
defined( 'EXIT_USER_INPUT' ) || define( 'EXIT_USER_INPUT', 7 ); // invalid user input
defined( 'EXIT_DATABASE' ) || define( 'EXIT_DATABASE', 8 ); // database error
defined( 'EXIT__AUTO_MIN' ) || define( 'EXIT__AUTO_MIN', 9 ); // lowest automatically-assigned error code
defined( 'EXIT__AUTO_MAX' ) || define( 'EXIT__AUTO_MAX', 125 ); // highest automatically-assigned error code

// CÓDIGOS COMUNICAÇÃO SERVICE - CONTROLLER

defined( 'SUCESS' ) || define( 'SUCESS', 1 );
defined( 'RECORD_NOT_FOUND' ) || define( 'RECORD_NOT_FOUND', 2 );
defined( 'INSUFFICIENT_DATA' ) || define( 'INSUFFICIENT_DATA', 3 );
defined( 'RECORD_IS_LINKED' ) || define( 'RECORD_IS_LINKED', 4 );
defined( 'DATABASE_CONNECTION_ERROR' ) || define( 'DATABASE_CONNECTION_ERROR', 5 );
defined( 'VALIDATION_PARAMS_ERROR' ) || define( 'VALIDATION_PARAMS_ERROR', 6 );
defined( 'JWT_TOKEN_NOT_FOUND' ) || define( 'JWT_TOKEN_NOT_FOUND', 7 );
defined( 'EMAIL_NOT_VERIFIED' ) || define( 'EMAIL_NOT_VERIFIED', 8 );
defined( 'USER_DEACTIVATED' ) || define( 'USER_DEACTIVATED', 9 );
defined( 'UNKNOWN_ERROR' ) || define( 'UNKNOWN_ERROR', 10 );

// HTTP RESPOSTAS
defined( 'HTTP_CODE_OK' ) || define( 'HTTP_CODE_OK', 200 );
defined( 'HTTP_CODE_NO_CONTENT' ) || define( 'HTTP_CODE_NO_CONTENT', 204 );
defined( 'HTTP_CODE_BAD_REQUEST' ) || define( 'HTTP_CODE_BAD_REQUEST', 400 );
defined( 'HTTP_CODE_UNAUTHORIZED' ) || define( 'HTTP_CODE_UNAUTHORIZED', 401 );
defined( 'HTTP_CODE_FORBIDDEN' ) || define( 'HTTP_CODE_FORBIDDEN', 403 );
defined( 'HTTP_CODE_NOT_FOUND' ) || define( 'HTTP_CODE_NOT_FOUND', 404 );
defined( 'HTTP_CODE_METHOD_NOT_ALLOWED' ) || define( 'HTTP_CODE_METHOD_NOT_ALLOWED', 405 );
defined( 'HTTP_CODE_INTERNAL_SERVER_ERROR' ) || define( 'HTTP_CODE_INTERNAL_SERVER_ERROR', 500 );

defined( 'HTTP_REASON_OK' ) || define( 'HTTP_REASON_OK', 'OK' );
defined( 'HTTP_REASON_NO_CONTENT' ) || define( 'HTTP_REASON_NO_CONTENT', 'No Content' );
defined( 'HTTP_REASON_BAD_REQUEST' ) || define( 'HTTP_REASON_BAD_REQUEST', 'Bad Request' );
defined( 'HTTP_REASON_UNAUTHORIZED' ) || define( 'HTTP_REASON_UNAUTHORIZED', 'Unauthorized' );
defined( 'HTTP_REASON_FORBIDDEN' ) || define( 'HTTP_REASON_FORBIDDEN', 'Forbidden' );
defined( 'HTTP_REASON_NOT_FOUND' ) || define( 'HTTP_REASON_NOT_FOUND', 'Not Found' );
defined( 'HTTP_REASON_METHOD_NOT_ALLOWED' ) || define( 'HTTP_REASON_METHOD_NOT_ALLOWED', 'Method Not Allowed' );
defined( 'HTTP_REASON_INTERNAL_SERVER_ERROR' ) || define( 'HTTP_REASON_INTERNAL_SERVER_ERROR', 'Internal Server Error' );

// REGEX COMUNS

defined( 'REGEX_RG' ) || define( 'REGEX_RG', '/^\d{2}\.\d{3}\.\d{3}-\d{1}$/' );
defined( 'REGEX_CPF' ) || define( 'REGEX_CPF', '/^\d{3}\.\d{3}\.\d{3}-\d{2}$/' );
defined( 'REGEX_CNPJ' ) || define( 'REGEX_CNPJ', '/^\d{2}\.\d{3}\.\d{3}\/\d{4}-\d{2}$/' );
defined( 'REGEX_ONLY_LETTERS_SPACES' ) || define( 'REGEX_ONLY_LETTERS_SPACES', '/^\s*([A-Za-záàâãéèêíïóôõöúçñÁÀÂÃÉÈÍÏÓÔÕÖÚÇÑ ])*\s*$/' );
defined( 'REGEX_DATE_US_PATTERN' ) || define( 'REGEX_DATE_US_PATTERN', '/^\d{4}-\d{2}-\d{2}$/' );
defined( 'REGEX_PHONE' ) || define( 'REGEX_PHONE', '/^(\(\d{2,4}\))?\s?\d{3,5}\-\d{4}$/' );
defined( 'REGEX_PHONE_LANDLINE' ) || define( 'REGEX_PHONE_LANDLINE', '/^(\(\d{2,4}\))\d{3,4}\-\d{4}$/' );
defined( 'REGEX_CEP' ) || define( 'REGEX_CEP', '/^\d{2}\.?\d{3}-\d{3}$/' );
defined( 'REGEX_GENERO' ) || define( 'REGEX_GENERO', '/^[M,F,O]$/' );
defined( 'REGEX_EMAIL' ) || define( 'REGEX_EMAIL', 	'/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/' );
defined( 'REGEX_HORARIO' ) || define( 'REGEX_HORARIO', '/^([01][0-9]|2[0-3]):[0-5][0-9]$/' );

// REGRAS DE NEGÓCIO

defined( 'MIN_AGE_REGISTER' ) || define( 'MIN_AGE_REGISTER', 18 );
defined( 'MAX_AGE_REGISTER' ) || define( 'MAX_AGE_REGISTER', 100 );
defined( 'TEMPO_MINIMO_CONSULTA' ) || define( 'TEMPO_MINIMO_CONSULTA', 1 ); // Esse tempo é calculado em minutos
defined( 'TEMPO_MAXIMO_GERACAO_AGENDA' ) || define( 'TEMPO_MAXIMO_GERACAO_AGENDA', 90 ); // Esse tempo é calculado em dias
defined( 'EMAIL_TOKEN_EXPIRATION_TIME' ) || define( 'EMAIL_TOKEN_EXPIRATION_TIME', 24 ); // Esse tempo é calculado em horas

defined( 'PERFIL_ADMINISTRADOR' ) || define( 'PERFIL_ADMINISTRADOR', 1 );
defined( 'PERFIL_MEDICO' ) || define( 'PERFIL_MEDICO', 2 );
defined( 'PERFIL_ASSISTENTE' ) || define( 'PERFIL_ASSISTENTE', 3 );
defined( 'PERFIL_RECEPCIONISTA' ) || define( 'PERFIL_RECEPCIONISTA', 56 );
defined( 'PERFIL_PACIENTE' ) || define( 'PERFIL_PACIENTE', 4 );
defined( 'PESSOA_FISICA_ID' ) || define( 'PESSOA_FISICA_ID', 1 );
defined( 'PESSOA_JURIDICA_ID' ) || define( 'PESSOA_JURIDICA_ID', 2 );

defined( 'TIPO_PERGUNTA_RESPOSTA_CURTA' ) || define( 'TIPO_PERGUNTA_RESPOSTA_CURTA', 1 );
defined( 'TIPO_PERGUNTA_PARAGRAFO' ) || define( 'TIPO_PERGUNTA_PARAGRAFO', 2 );
defined( 'TIPO_PERGUNTA_MULTIPLA_ESCOLHA' ) || define( 'TIPO_PERGUNTA_MULTIPLA_ESCOLHA', 3 );
defined( 'TIPO_PERGUNTA_CHECKBOX' ) || define( 'TIPO_PERGUNTA_CHECKBOX', 4 );
defined( 'TIPO_PERGUNTA_RESPOSTA_NUMERICA_INTEIRA' ) || define( 'TIPO_PERGUNTA_RESPOSTA_NUMERICA_INTEIRA', 5 );
defined( 'TIPO_PERGUNTA_SIM_OU_NAO' ) || define( 'TIPO_PERGUNTA_SIM_OU_NAO', 6 );
defined( 'TIPO_PERGUNTA_RESPOSTA_NUMERICA_DECIMAL' ) || define( 'TIPO_PERGUNTA_RESPOSTA_NUMERICA_DECIMAL', 7 );

defined( 'ID_TIPO_PROCEDIMENTO_CONSULTA' ) || define( 'ID_TIPO_PROCEDIMENTO_CONSULTA', 5 );
defined( 'ID_PROCEDIMENTO_CONSULTA' ) || define( 'ID_PROCEDIMENTO_CONSULTA', 1 );
defined( 'ID_CLINICA_NESTOR' ) || define( 'ID_CLINICA_NESTOR', 1 );

// Formas de pagamentos

defined( 'FORMAPAGAMENTO_CARTAOCREDITO' ) || define( 'FORMAPAGAMENTO_CARTAOCREDITO', 1 );
defined( 'FORMAPAGAMENTO_CARTAODEBITO' ) || define( 'FORMAPAGAMENTO_CARTAODEBITO', 2 );
defined( 'FORMAPAGAMENTO_PIX' ) || define( 'FORMAPAGAMENTO_PIX', 3 );
defined( 'FORMAPAGAMENTO_FILANTROPIA' ) || define( 'FORMAPAGAMENTO_FILANTROPIA', 4 );
defined( 'FORMAPAGAMENTO_SUSANIMAL' ) || define( 'FORMAPAGAMENTO_SUSANIMAL', 5 );
defined( 'FORMAPAGAMENTO_NOTAPROMISSORIA' ) || define( 'FORMAPAGAMENTO_NOTAPROMISSORIA', 6 );
defined( 'FORMAPAGAMENTO_DINHEIRO' ) || define( 'FORMAPAGAMENTO_DINHEIRO', 7 );
defined( 'FORMAPAGAMENTO_ANTECIPADO' ) || define( 'FORMAPAGAMENTO_ANTECIPADO', 8 );
defined( 'FORMAPAGAMENTO_CREDITOCLIENTE' ) || define( 'FORMAPAGAMENTO_CREDITOCLIENTE', 9 );
defined( 'FORMAPAGAMENTO_BOLETO' ) || define( 'FORMAPAGAMENTO_BOLETO', 10 );

// STATUS REQUISIÇÕES

defined( 'REQUISICAO_STATUS_CRIADO' ) || define( 'REQUISICAO_STATUS_CRIADO', 1 );
defined( 'REQUISICAO_STATUS_EXECUTADO' ) || define( 'REQUISICAO_STATUS_EXECUTADO', 2 );
defined( 'REQUISICAO_STATUS_EXCLUÍDO' ) || define( 'REQUISICAO_STATUS_EXCLUÍDO', 3 );
defined( 'REQUISICAO_STATUS_CRIADO_ATD_CONTIUADO' ) || define( 'REQUISICAO_STATUS_CRIADO_ATD_CONTIUADO', 4 );
defined( 'REQUISICAO_STATUS_EXECUTADO_ATD_CONTINUADO' ) || define( 'REQUISICAO_STATUS_EXECUTADO_ATD_CONTINUADO', 5 );

