'''
risk_manage_engine/calculators/var.py

Value at Risk (VaR)를 계산하는 함수 모듈입니다.

- 목적: 일정 기간 내 손실이 특정 확률(신뢰수준) 이상 발생하지 않을 것이라는 수준을 계산
- 방법: 수익률 분포 기반, 정규분포 가정 또는 히스토리 기반 가능

MVP 단계에서는 히스토리컬 방식 사용
'''

import numpy as np
import pandas as pd

def calculate_var(df: pd.DataFrame, confidence_level: float = 0.95) -> float:
    """
    Value at Risk (VaR)를 계산하는 함수

    Parameters:
        df (pd.DataFrame): CDS 데이터 (필수: 'close' 컬럼)
        confidence_level (float): 신뢰 수준 (기본 95%)

    Returns:
        float: VaR 값 (양수, 손실 한계치)
    """
    # 수익률 계산: 오늘 대비 내일 수익률
    df = df.copy()
    df['return'] = df['close'].pct_change()
    df.dropna(inplace=True)

    # 수익률들을 오름차순 정렬
    sorted_returns = np.sort(df['return'].values)

    # VaR은 하위 (1 - 신뢰수준)% 위치에 해당하는 손실
    var_index = int((1 - confidence_level) * len(sorted_returns))
    var_value = abs(sorted_returns[var_index])

    return round(var_value, 4)