<?php

use app\database\ConnectionFlora as ConnectionFlora;

require 'bootstrap.php';

$app->get('/', function ($request, $response) {
    return $this->renderer->render($response, "index.html");
});

$app->get('/families', function ($request, $response) {
    $con = new ConnectionFlora;
    $result = $con->findFamilies();

    return $response->withJson($result, 200);
});

$app->get('/genus/{family}', function ($request, $response, $args) {
    $con = new ConnectionFlora;
    $result = $con->findGenusByFamily($args['family']);

    return $response->withJson($result, 200);
});

$app->get('/species/genus/{genus}', function ($request, $response, $args) {
    $con = new ConnectionFlora;
    $result = $con->findSpeciesByGenus($args['genus']);

    return $response->withJson($result, 200);
});

$app->get('/url/{scientificName}', function ($request, $response, $args) {
    $reference = null;
    $con = new ConnectionFlora;

    $name = str_replace("_", " ", trim($args['scientificName']));
    $var = explode(" ", $name);

    $args = substr_count(trim($name), ' ');

    if ($args == 0) {
	$result = $con->findReferencesByGenusOrFamily($name, $name);          
	
	if ($result != null) $reference = $result;
    } else if ($args == 1) {
	$result = $con->findReferencesByGenusAndScientificName($var[0], $var[1]);

	if ($result != null) $reference = $result;
    } else if ($args == 2) {
	$result = $con->findReferencesByGenusAndScientificNameAndInfra($var[0], $var[1], $var[2]);

	if ($result != null) $reference = $result;
    } else if ($args > 2) {
	$result = $con->findReferencesByScientificName($name);

	if ($result != null) $reference = $result;
    }

    if($reference == null) $reference = $con->findReferencesByScientificName($name);

    return $response->withJson($reference, 200);
});

$app->get('/species/{family}', function ($request, $response, $args) {
    $con = new ConnectionFlora;
    $result = $con->findSpeciesByFamily($args['family']);

    return $response->withJson($result, 200);
});

$app->get('/taxon/{scientificName}', function ($request, $response, $args) {
    $con = new ConnectionFlora;
    $result = $con->findTaxonomyBy($args['scientificName']);

    return $response->withJson($result, 200);
});

$app->get('/search/{scientificName}', function ($request, $response, $args) {
    $reference = null;
    $con = new ConnectionFlora;

    $name = str_replace("_", " ", trim($args['scientificName']));
    $var = explode(" ", $name);

    $args = substr_count(trim($name), ' ');

    if ($args == 0) {
        $result = $con->findReferencesByGenusOrFamily($name, $name);

        if ($result != null) $reference = $result[0]->references;

    } else if ($args == 1) {
        $result = $con->findReferencesByGenusAndScientificName($var[0], $var[1]);

        if ($result != null) $reference = $result[0]->references;
    } else if ($args == 2) {
        $result = $con->findReferencesByGenusAndScientificNameAndInfra($var[0], $var[1], $var[2]);

        if ($result != null) $reference = $result[0]->references;
    } else if ($args > 2) {
        $result = $con->findReferencesByScientificName($name);

        if ($result != null) $reference = $result[0]->references;
    }

    if ($reference == null) $reference = "http://servicos.jbrj.gov.br/flora/error/notfound.php";

    return $response->withRedirect($reference, 301);
});

$app->run();

