from typing import Optional

import lxml
from lxml.html.diff import htmldiff


def highlight_html_differences(s1: str, s2: str, msg_id: Optional[int] = None) -> str:
    retval = htmldiff(s1, s2)
    fragment = lxml.html.fragment_fromstring(retval, create_parent=True)

    for elem in fragment.cssselect("del"):
        elem.tag = "span"
        elem.set("class", "highlight_text_deleted")

    for elem in fragment.cssselect("ins"):
        elem.tag = "span"
        elem.set("class", "highlight_text_inserted")

    retval = lxml.html.tostring(fragment, encoding="unicode")

    return retval
