import re
import pathlib

def parse_m3u(filepath: str) -> list[dict]:
    """M3U プレイリストをパースしてチャンネルリストを返す"""
    lines = pathlib.Path(filepath).read_text(encoding='utf-8', errors='replace').splitlines()
    channels = []
    for i, line in enumerate(lines):
        if not line.startswith('#EXTINF'):
            continue
        name_m = re.search(r',(.+)$', line)
        group_m = re.search(r'group-title="([^"]+)"', line)
        logo_m = re.search(r'tvg-logo="([^"]+)"', line)
        url = lines[i + 1].strip() if i + 1 < len(lines) else ''
        channels.append({
            'name': name_m.group(1).strip() if name_m else '不明',
            'group': group_m.group(1) if group_m else '',
            'logo': logo_m.group(1) if logo_m else '',
            'url': url,
        })
    return channels

if __name__ == '__main__':
    chs = parse_m3u('lib/iptv.m3u')
    for ch in chs[:20]:
        print(f"[{ch['group']:15s}] {ch['name']:30s}  {ch['url'][:50]}")
