import logging
import requests

def do_celcat_calendar_request(min_date, max_date, module_apogee_codes, session, url='https://edt.univ-tlse3.fr/calendar/Home/GetCalendarData'):
    assert min_date < max_date, f"min_date (value={min_date}) should be strictly greater than max_date (value={max_date})"
    headers = {"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"}
    fields = [
        f'start={min_date}',
        f'end={max_date}',
        'resType=100',
        'calView=agendaWeek',
    ] + ['federationIds%5B%5D={}'.format(apogee_code) for apogee_code in module_apogee_codes]
    fields_str = '&'.join(fields)

    logging.info(f'Fetching modules {module_apogee_codes} from {min_date} to {max_date} on url={url}')
    response = session.post(url, data=fields_str, headers=headers)
    if not response.ok:
        logging.error(f'POST HTTP request failed (status code {response.status_code}): {response.reason}')
        logging.error(f'Request response text:\n---\n{response.text}\n---')
        response.raise_for_status()
    return response.text