from flask import Blueprint, request
from db import cursor, connection
from hierarchy import auth_required, two_person
from socket_io import io
import time


def create_relation(user_1_id, user_2_id, relation_type):
    remove_relation(user_1_id, user_2_id)
    remove_relation(user_2_id, user_1_id)
    timestamp = int(time.time() * 1000)
    cursor.execute(
        "insert into social values (?, ?, ?, ?)",
        [user_1_id, user_2_id, relation_type, timestamp]
    )
    connection.commit()


# remove relation between user_1_id and user_2_id (one-way)
def remove_relation(user_1_id, user_2_id):
    cursor.execute(
        "delete from social where user_1_id = ? and user_2_id = ?",
        [user_1_id, user_2_id]
    )
    connection.commit()


def create_relation_route(relation_type):
    @two_person
    def route(user_1_id, user_2_id):
        create_relation(user_1_id, user_2_id, relation_type)

        if relation_type == "outgoing":
            io.emit("incomingFriendRequest", room="user-" + user_2_id)

        return "", 200

    return route


friend_request = Blueprint('friend_request', __name__)
friend_request.add_url_rule(
    '/request', 'route', create_relation_route("outgoing"), methods=["POST"]
)

block = Blueprint('block', __name__)
block.add_url_rule(
    '/block', 'route', create_relation_route("block"), methods=["POST"]
)

dynamic_routes = [["/social", friend_request], ["/social", block]]