#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on: 16/01/2023
@author: Andoni Aranguren Ubierna
@updates: Sergio Campos 02-03/2023

"""
DDBB_CONFIG = {'user': 'root', 'password': 'Tecnalia###2023', 'host': 'localhost', 'database': 'urbanite_recommender', 'autocommit': True}
OTP_CONFIG = {'host': 'https://afrp.santander.urbanage.digital.tecnalia.dev/'}

ERROR_EXCEPTION = [{"error": "Upss... Something went wrong"}, 415]
ERROR_JSON_NEEDED = [{"error": "Request must be JSON"}, 415]
ERROR_plan_DATE_MISSING = [{"error": " ".join(["No date was found in the plan.",
                                                      "That's weird, did you do it by hand? Use /planner/plan_detail"])}, 415]
ERROR_INVALID_action_ID = [{"error": "At least one of the provided action id are not found in the database"}, 415]
ALL_RIGHT = [{"All right!": "The request has been completed correctly"}, 200]

DEFAULT_PREFERENCES = ["sports", "culture", "sightseeing", "gastronomy"]
DEFAULT_TIME_SLOTS = ["08:30", "12:30", "15:30", "19:30", "23:30"]
DEFAULT_INSERT_plan_detail_ORDER = ["plan_id", "time_slot", "fecha_hora", "arrive_by", "wheelchair", "max_walk_distance",
                              "from_lat", "from_lon", "to_lat", "to_lon",
                              "sports", "culture", "sightseeing", "gastronomy",
                              "action_id_array"]
REGEXP_COORDS = r"^\-?[0-9]+\.[0-9]+,\-?[0-9]+\.[0-9]+$"
REGEXP_DATE = r"^2[0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9]$"
REGEXP_INTERMEDIATE_NODES = r"^[0-9]+(?:,[0-9]+)*$"
REGEXP_TIME = r"^[0-2][0-9]:[0-5][0-9]$"

DEFAULT_SHIFTING = 0.0001
DEFAULT_SHIFTING_AMOUNT = 1.01
DEFAULT_MAX_TRIES_TO_RELOCATE_ENDING_actionNT = 100
DEFAULT_OTP_TOO_CLOSE = 'ES-los Origin is within a trivial distance of the destination.'

plan_JSON_TEMPLATE = dict(date=None, plan_details={0: {},  # Morning plan_detail
                                                  1: {},  # Lunch brake or pintxos plan_detail
                                                  2: {},  # Afternoon plan_detail
                                                  3: {}})  # Dinner brake or pintxos plan_detail

# Load data
PATH_plan_detailS = "data/Rutas"
PATH_actionS = "data/actions"
PATH_extra = "../extra_data"

# Load data - SQL queries
sql_insert_action = """
INSERT IGNORE INTO action(action_id, lat, lon, action_name) 
VALUES (%s, %s, %s, %s)
"""

sql_insert_kpi = """INSERT IGNORE INTO kpi(kpi_name) VALUES(%s)"""

sql_get_kpi_ids = """SELECT kpi_name, kpi_id FROM kpi WHERE kpi_name IN ('{names}')"""

sql_insert_plan = """
INSERT IGNORE INTO plan(plan_date)
VALUES(%s);
"""

sql_insert_plan_detail = """
INSERT IGNORE INTO plan_detail(plan_id, time_slot, 
                        from_lat, from_lon, to_lat, to_lon,
                        fecha_hora, sports, culture, sightseeing, gastronomy)
VALUES((SELECT plan_id FROM plan WHERE plan_date = '{date}'), %s, 
        43.2668, -2.9353, 43.2600, -2.9393,
        %s, %s, %s, %s, %s)
"""

sql_get_chosen_action_ids = """SELECT action_name, action_id FROM action WHERE action_name LIKE %s"""

sql_insert_chosen_action = """
INSERT IGNORE INTO CHOSEN_action(plan_id, time_slot, action_id)
VALUES((SELECT plan_id FROM plan WHERE plan_date = '{date}'), %s, %s)
"""


sql_insert_kpi = """
INSERT IGNORE INTO kpi (kpi_name, kpi_full_name, parent_id, kpi_level, popularity, use_case_id)
VALUES(%s, %s, %s, %s, %s, %s)
"""

sql_get_kpis_data = """SELECT id, kpi_name, kpi_full_name, parent_id, kpi_level, popularity, use_case_id FROM kpi"""
sql_get_kpi_from_case_ids = """SELECT id, kpi_name, kpi_full_name, parent_id, kpi_level, popularity, use_case_id FROM kpi WHERE use_case_id IN (%s)"""

sql_action_kpi = """SELECT id, action_id, kpi_id, kpi_name, use_case_id, absolute FROM kpi_action WHERE kpi_id = %s"""

sql_insert_action_kpi = """
INSERT IGNORE INTO kpi_action(action_id, kpi_id, kpi_name, use_case_id, absolute, relative, geographical, zoneId)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
"""

sql_update_action_kpi = """
UPDATE kpi_action 
SET action_id = %s, kpi_id = %s, kpi_name = %s, use_case_id = %s, absolute = %s, relative = %s, geographical = %s, zoneId = %s
WHERE kpi_id = %s
"""