# application/energy/routes.py
from flask import Blueprint, request, jsonify, g
from datetime import datetime
from ..auth.decorators import token_required
from application.energy.utils import Utilities

energy_bp = Blueprint('energy', __name__, url_prefix='/api/energy')
utils = Utilities()

@energy_bp.route('/today', methods=['GET'])
@token_required
def get_today():
    user_id = g.current_user['id']

    result = utils.get_daily_energy(user_id)
    return jsonify({
        'success': True,
        'data': result
    })

@energy_bp.route('/chart-data', methods=['GET'])
@token_required
def get_chart_data():
    period = request.args.get('period', 'daily')

    result = []
    if period not in ['week', 'month', 'year']:
        return jsonify({'success': False, 'error': 'Invalid period specified', 'code': 'INVALID_PERIOD'}), 400
    if period == 'week':
        result = utils.calculate_weekly_energy(g.current_user['id'])
    if period == 'month':
        result = utils.calculate_monthly_energy(g.current_user['id'])
    if period == 'year':
        result = utils.calculate_yearly_energy(g.current_user['id'])
    return jsonify(result)

@energy_bp.route('/monthly', methods=['GET'])
@token_required
def get_monthly_energy():
    month = int(request.args.get('month', datetime.now().month))
    year = int(request.args.get('year', datetime.now().year))
    result = utils.get_monthly_energy(g.current_user['id'], month, year)

    if not result:
        return jsonify({'success': False, 'error': 'No monthly data found', 'code': 'NO_DATA'}), 404

    return jsonify({
        'success': True,
        'data': result
    })

@energy_bp.route('/annual', methods=['GET'])
@token_required
def get_annual_energy():
    year = int(request.args.get('year', datetime.utcnow().year))

    result = utils.get_annual_energy(g.current_user['id'], year)

    if not result:
        return jsonify({'success': False, 'error': 'No monthly data found', 'code': 'NO_DATA'}), 404

    return jsonify({
        'success': True,
        'data': result
    })
