from api.modules import utils

from flask import Flask, request,Response
from flask_restful import Resource, Api, abort

import json
import os

app = Flask(__name__)
api = Api(app)

db_path = os.path.join(app.root_path, 'databases', 'denunciations.json')
with open(db_path, 'r') as f:
    denunciations = json.load(f)

users_path = os.path.join(app.root_path, 'databases', 'users.json')
with open(users_path, 'r') as f:
    users = json.load(f)

class Alert(Resource):
    def post(self):
        args = request.form
        reporter = args['id']
        user = utils.find_by_id(users.values(), reporter)
        trust = int(user["trustability"])
        if args["accepted"] == "true" or trust > 20:
            photo = args["photo"]
            if utils.find_by_id(users.values(), reporter):
                denunciation_info = args['note']
                denunciation_priority = 5
                denunciation_location = {
                    "latitude": float(args['latitude']),
                    "longitude": float(args['longitude'])
                }

                denunciation = {
                    'id': len(denunciations) + 1,
                    'reporter': reporter,
                    'emergency': args['emergency'],
                    'info': denunciation_info,
                    'photo': photo,
                    'priority': denunciation_priority,
                    'location': denunciation_location
                }

                denunciations.append(denunciation)

                with open(db_path, 'w') as f:
                    json.dump(denunciations, f, indent=4)

                return {'success': True}
            else:
                return {'error': 'User doesn\'t exists'}
        else:
            return {"success": False, "penalty": "{}".format(100*(20-trust))}


class Denunciations(Resource):
    def get(self):
        resp = Response(json.dumps([
            {
                'id'  : v['id'],
                "reporter": v["reporter"],
                'info': v['info'],
                'priority': v['priority'],
                'emergency': v['emergency'],
                'photo': v['photo'],
                'location' : v['location']
            }
            for v in denunciations
        ]
        ))
        resp.headers['Access-Control-Allow-Origin'] = '*'

        return resp
