"""Bot-side client for the musician's share-list / share-link endpoints.

This module used to hardcode the musician's LAN address and send no auth
header, which broke the file-share feature in two ways:

* the musician's ``/get_share_list`` and ``/get_share_links`` both call
  ``_authorize_request()``, so every request 401'd on any deployment that set
  ``CONJURER_API_KEY`` — which the deployment guides tell you to do; and
* the hardcoded IP ignored ``CONJURER_FILE_SERVICE``, so a musician running on
  another host (the Proxmox/docker split) was unreachable.

It now follows the same convention as the other service clients
(``music_functions``): address from ``constants``, shared auth headers, and an
explicit timeout so a wedged musician can't hang the bot.
"""
import requests

from constants import (
    FILE_SERVICE_ADDRESS,
    GET_SHARE_LINKS,
    GET_SHARE_LIST,
    service_headers,
)

SERVICE_HEADERS = service_headers()
REQUEST_TIMEOUT = 60


def find_matches(entries, keywords):
    """
    Call the get_share_list endpoint.
    entries: int (1-10)
    keywords: list of strings
    Returns: list of file paths
    """
    payload = {'entries': entries, 'keywords': keywords}
    response = requests.post(
        f"{FILE_SERVICE_ADDRESS}{GET_SHARE_LIST}",
        json=payload,
        headers=SERVICE_HEADERS,
        timeout=REQUEST_TIMEOUT,
    )
    response.raise_for_status()
    data = response.json()
    return data.get('files', [])


def publish(file_paths):
    """
    Call the get_share_links endpoint.
    file_paths: list of file path strings
    Returns: list of published URLs
    """
    payload = {'file_paths': file_paths}
    response = requests.post(
        f"{FILE_SERVICE_ADDRESS}{GET_SHARE_LINKS}",
        json=payload,
        headers=SERVICE_HEADERS,
        timeout=REQUEST_TIMEOUT,
    )
    response.raise_for_status()
    data = response.json()
    return data.get('links', [])
