"""
This file contains functionality to get data from the database.
"""

from app.core import db


def switch_order(item1, item2):
    """ Switches order between two slides. """

    old_order = item1.order
    new_order = item2.order

    item2.order = -1
    db.session.commit()
    db.session.refresh(item2)

    item1.order = new_order
    db.session.commit()
    db.session.refresh(item1)

    item2.order = old_order
    db.session.commit()
    db.session.refresh(item2)

    return item1


def component(item, x, y, w, h, data):
    """ Edits position, size and content of the provided component. """

    if x:
        item.x = x
    if y:
        item.y = y
    if w:
        item.w = w
    if h:
        item.h = h
    if data:
        item.data = data

    db.session.commit()
    db.session.refresh(item)
    return item


def slide(item, title=None, timer=None):
    """ Edits the title and timer of the slide. """

    if title:
        item.title = title
    if timer:
        item.timer = timer

    db.session.commit()
    db.session.refresh(item)
    return item


def team(item_team, name=None, competition_id=None):
    """ Edits the name and competition of the team. """

    if name:
        item_team.name = name
    if competition_id:
        item_team.competition_id = competition_id

    db.session.commit()
    db.session.refresh(item_team)
    return item_team


def competition(item, name=None, year=None, city_id=None):
    """ Edits the name and year of the competition. """

    if name:
        item.name = name
    if year:
        item.year = year
    if city_id:
        item.city_id = city_id

    db.session.commit()
    db.session.refresh(item)
    return item


def user(item, name=None, email=None, city_id=None, role_id=None):
    """ Edits the name, email, city and role of the user. """

    if name:
        item.name = name.title()

    if email:
        item.email = email

    if city_id:
        item.city_id = city_id

    if role_id:
        item.role_id = role_id

    db.session.commit()
    db.session.refresh(item)
    return item


def question(item_question, name=None, total_score=None, type_id=None, slide_id=None):
    """ Edits the name, score, type and slide of the question. """

    if name:
        item_question.name = name

    if total_score:
        item_question.total_score = total_score

    if type_id:
        item_question.type_id = type_id

    if slide_id:
        item_question.slide_id = slide_id

    db.session.commit()
    db.session.refresh(item_question)

    return item_question


def question_alternative(item, text=None, value=None):

    if text:
        item.text = text

    if value:
        item.value = value

    db.session.commit()
    db.session.refresh(item)

    return item


def question_answer(item, data=None, score=None):

    if data:
        item.data = data

    if score:
        item.score = score

    db.session.commit()
    db.session.refresh(item)

    return item