"""Analysis routes - asset analysis and signals."""
from flask import Blueprint, render_template, request, redirect
from flask_login import login_required, current_user
from app.models.asset import Asset
from app.models.watchlist import Watchlist
from app.models.signal import TradingSignal
from app.helpers.asset_filter import apply_asset_filter, get_asset_mode
from app.helpers.auth import get_current_user_id

analysis_bp = Blueprint('analysis', __name__)

_engine = None


def _get_engine():
    global _engine
    if _engine is None:
        from app.engine import AlgorithmEngine
        _engine = AlgorithmEngine()
    return _engine


@analysis_bp.route('/')
@login_required
def overview():
    """Analysis overview - shows all watchlist assets with quick signals."""
    watchlist = Watchlist.query.filter(Watchlist.user_id == get_current_user_id()).order_by(Watchlist.display_order.asc()).all()
    assets = apply_asset_filter(Asset.query.filter_by(is_active=True)).limit(20).all()

    return render_template('analysis/overview.html',
                           watchlist=watchlist,
                           assets=assets,
                           algorithms=_get_engine().list_algorithms())


@analysis_bp.route('/<asset_id>')
@login_required
def coin_analysis(asset_id):
    """Redirect to unified asset detail page with analysis tab."""
    timeframe = request.args.get('timeframe', '1h')
    source = request.args.get('source', '')
    url = f'/market/asset/{asset_id}?tab=analysis&timeframe={timeframe}'
    if source:
        url += f'&source={source}'
    return redirect(url, code=301)


@analysis_bp.route('/signals')
@login_required
def signals():
    """Signal history page."""
    assets = apply_asset_filter(Asset.query.filter_by(is_active=True)).limit(20).all()
    signals = TradingSignal.query.join(Asset, TradingSignal.asset_id == Asset.id)\
        .filter(Asset.asset_type == get_asset_mode())\
        .order_by(TradingSignal.created_at.desc()).limit(50).all()

    return render_template('analysis/signals.html',
                           assets=assets,
                           signals=signals)
