from flask import Blueprint, request, json
from flask_cors import *

from service.taxonsPageService import getSpecies, getSpeciesIntro, getGenus

taxons = Blueprint('taxons', __name__)
CORS(taxons, support_credentials=True)


@taxons.route('/species', methods=['GET'])
def speciesData():
    checkedSites = request.args.get("checkedSites")
    page = request.args.get("page")
    limit = request.args.get("limit")
    propName = request.args.get("propName")
    propOrder = request.args.get("propOrder")
    secondPropName = request.args.get("secondName")
    secondPropOrder = request.args.get("secondOrder")
    if propOrder == 'ascending':
        propOrder = 'ASC'
    else:
        propOrder = 'DESC'
    if secondPropOrder == 'ascending':
        secondPropOrder = 'ASC'
    else:
        secondPropOrder = 'DESC'
    checkedSites = json.loads(checkedSites)
    speciesRes = getSpecies(checkedSites, int(page), int(limit), propName, propOrder, secondPropName, secondPropOrder)
    speciesIntro = getSpeciesIntro()
    result = {
        'species': speciesRes,
        'species_intro': speciesIntro
    }
    return result


@taxons.route('/genus', methods=['GET'])
def genusData():
    checkedSites = request.args.get("checkedSites")
    page = request.args.get("page")
    limit = request.args.get("limit")
    propName = request.args.get("propName")
    propOrder = request.args.get("propOrder")
    secondPropName = request.args.get("secondName")
    secondPropOrder = request.args.get("secondOrder")
    if propOrder == 'ascending':
        propOrder = 'ASC'
    else:
        propOrder = 'DESC'
    if secondPropOrder == 'ascending':
        secondPropOrder = 'ASC'
    else:
        secondPropOrder = 'DESC'
    checkedSites = json.loads(checkedSites)
    genusRes = getGenus(checkedSites, int(page), int(limit), propName, propOrder, secondPropName, secondPropOrder)
    speciesIntro = getSpeciesIntro()
    result = {
        'genus': genusRes,
        'species_intro': speciesIntro
    }
    return result
