"""HTML report generation for missing albums"""
from html import escape
from typing import Dict, List
def generate_html_report(albums_to_add: List[Dict], albums_to_update: List[Dict]):
"""Generate an HTML report with clickable submission links"""
html_content = """
MusicBrainz Albums - Add & Update
🎵 MusicBrainz Albums - Add & Update
Albums to ADD: {add_count} | Albums to UPDATE: {update_count}
Filter by Type:
Show All
To ADD ({add_count})
To UPDATE ({update_count})
Filter by Artist:
All Artists
{artist_buttons}
"""
album_html = """
{title}
by {artist}
{mb_info}
{issues_info}
"""
def format_album(album: Dict, is_update: bool = False) -> str:
submission_links = album.get("submission_links", {})
mb_info = ""
issues_info = ""
if is_update:
mb_url = album.get("mb_url", "")
if mb_url:
mb_info = f''
issues = album.get("album_issues", [])
if issues:
issues_info = f'Issues: {", ".join(issues)}
'
title = album.get("title", "Unknown Title")
artist = album.get("artist_name", "Unknown Artist")
artist_escaped = escape(artist)
atisket_link = submission_links.get("atisket_link", "#")
harmony_link = submission_links.get("harmony_link", "#")
deezer_url = submission_links.get("deezer_url", "#")
return album_html.format(
title=escape(title),
artist=artist,
artist_escaped=artist_escaped,
mb_info=mb_info,
issues_info=issues_info,
atisket_link=atisket_link,
harmony_link=harmony_link,
deezer_url=deezer_url,
)
all_albums = albums_to_add + albums_to_update
unique_artists = sorted(
set(album.get("artist_name", "Unknown") for album in all_albums)
)
artist_buttons_html = "".join(
f'{escape(artist)} '
for artist in unique_artists
)
albums_html = ""
if albums_to_add:
albums_html += ''
albums_html += "
📥 Albums to ADD (Not in MusicBrainz) "
formatted_add = map(lambda album: format_album(album, False), albums_to_add)
albums_html += "".join(formatted_add)
albums_html += ""
if albums_to_update:
albums_html += ''
albums_html += "
🔄 Albums to UPDATE (Need Linking/Updates) "
formatted_update = map(
lambda album: format_album(album, True), albums_to_update
)
albums_html += "".join(formatted_update)
albums_html += ""
add_count = len(albums_to_add)
update_count = len(albums_to_update)
html_header = html_content.format(
add_count=add_count,
update_count=update_count,
artist_buttons=artist_buttons_html,
)
html_footer = "\n\n\n"
html_content = html_header + albums_html + html_footer
with open("missing_albums.html", "w", encoding="utf-8") as f:
f.write(html_content)
print(f"📄 HTML report saved to missing_albums.html")