import polars as pl


def run(tb_sap_makt, options, contexts):
    # 언어별(spras) 많은 순서
    spras_priority = [
        "E",
        "1",
        "5",
        "4",
        "D",
        "S",
        "G",
        "P",
        "6",
        "W",
        "d",
        "J",
        "R",
        "F",
        "3",
        "8",
    ]
    lang_priority = {code: i + 1 for i, code in enumerate(spras_priority)}

    # 우선순위 랭크 부여
    makt_ranked = tb_sap_makt.with_columns(
        pl.col("spras")
        .replace(lang_priority)  # 우선순위 숫자 매핑
        .fill_null(99)  # 매핑 안 된 코드는 꼴찌
        .alias("lang_rank")
    )

    # 자재(matnr)별로 언어 우선순위가 가장 높은 1건만 남기기
    result = (
        makt_ranked.sort(["matnr", "lang_rank"])
        .unique(subset=["matnr"], keep="first")
        .select(
            [
                pl.col("matnr").alias("material_id"),
                pl.col("spras").alias("language"),
                pl.col("maktg").alias("material_desc"),
            ]
        )
    )

    return {"tb_makt_lang_filter": result}
