import os
import requests
import datetime

REPO_NAME = "DSpace Filatov"

# Получаем текущий год и вычисляем начальную и конечную даты
current_date = datetime.date.today()
start_date = datetime.date(current_date.year, 1, 1)  # 1 января текущего года
end_date = current_date  # Текущая дата

# Форматируем текущую дату для вывода в заголовке
current_date_str = current_date.strftime("%d.%m.%Y")

# Словарь для отображения номеров месяцев на украинском
month_names = {
    1: 'Січень', 2: 'Лютий', 3: 'Березень', 4: 'Квітень',
    5: 'Травень', 6: 'Червень', 7: 'Липень', 8: 'Серпень',
    9: 'Вересень', 10: 'Жовтень', 11: 'Листопад', 12: 'Грудень'
}

def get_documents_by_submitter(start_datetime, end_datetime):
    """ Выполнить запрос к Solr и получить количество документов по загружающим """
    solr_url = "http://localhost:8983/solr/search/select"
    params = {
        'q': 'archived:true',
        'fq': [
            '-entityType: Person',
            'discoverable:true',
            'withdrawn:false',
            f'dc.date.accessioned_dt:[{start_datetime} TO {end_datetime}]'
        ],
        'fl': 'submitter_keyword',
        'rows': 100,
        'indent': 'true',
        'q.op': 'AND'
    }

    try:
        response = requests.get(solr_url, params=params)
        response.raise_for_status()
        data = response.json()
        return data['response']['docs']
    except (requests.RequestException, KeyError) as e:
        print(f"Ошибка при запросе Solr: {e}")
        return []

def generate_daily_report(year, month, month_name):
    """ Генерируем подотчет по дням """
    daily_data = {}
    
    start_date = datetime.date(year, month, 1)
    end_date = (start_date + datetime.timedelta(days=32)).replace(day=1) - datetime.timedelta(days=1)

    for day in range(1, end_date.day + 1):
        start_datetime = f"{year}-{str(month).zfill(2)}-{str(day).zfill(2)}T00:00:00Z"
        end_datetime = f"{year}-{str(month).zfill(2)}-{str(day).zfill(2)}T23:59:59Z"
        documents = get_documents_by_submitter(start_datetime, end_datetime)

        for doc in documents:
            for submitter in doc.get('submitter_keyword', []):
                if submitter not in daily_data:
                    daily_data[submitter] = 0
                daily_data[submitter] += 1

    return daily_data

def generate_monthly_report():
    """ Генерируем помесячный отчет """
    current = datetime.datetime.combine(start_date, datetime.time.min)
    reports_dir = 'reports'
    if not os.path.exists(reports_dir):
        os.makedirs(reports_dir)

    monthly_data = {}

    while current.date() <= end_date:
        year = current.year
        month = current.month
        month_name = month_names[month]
        
        daily_data = generate_daily_report(year, month, month_name)
        
        # Месяц + Год для отображения в таблице
        month_year_name = f"{month_name} {year}"
        
        if monthly_data.get(month_year_name) is None:
            monthly_data[month_year_name] = {}
        
        for submitter, count in daily_data.items():
            if submitter not in monthly_data[month_year_name]:
                monthly_data[month_year_name][submitter] = 0
            monthly_data[month_year_name][submitter] += count
        
        current += datetime.timedelta(days=32)
        current = current.replace(day=1)

    # Сохранение отчетов
    with open('submitters.html', 'w', encoding='utf-8') as file:
        html = f"""
<!DOCTYPE html>
<html lang="uk">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Відправлені документи у {REPO_NAME} на {current_date_str}</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>
    <div class="container">
        <h1 class="mt-4">Відправлені документи у {REPO_NAME} на {current_date_str}</h1>
        <a href="statistics.html" class="btn btn-primary mt-4">Перейти до статистики завантажень</a>
        <table class="table table-bordered mt-4">
            <thead>
                <tr>
                    <th>Місяць</th>
                    <th>Завантаження</th>
                </tr>
            </thead>
            <tbody>
"""
        for month, submitters in monthly_data.items():
            html += f"<tr><td>{month}</td><td>"
            for submitter, count in submitters.items():
                html += f"{submitter}: {count}<br>"
            html += "</td></tr>"

        html += """
            </tbody>
        </table>
        <a href="statistics.html" class="btn btn-primary mt-4">Перейти до статистики завантажень</a>
    </div>
</body>
</html>
"""
        file.write(html)

if __name__ == "__main__":
    generate_monthly_report()
    print("Статистичний HTML файл 'submitters.html' успішно створено.")
