def urun_adi_temizle(urun):
    donusum = str.maketrans({"I": "ı", "İ": "i"})
    return urun.strip().translate(donusum).lower()


def negatif_olmayan_sayi_coz(metin):
    try:
        sayi = float(metin.strip().replace(",", "."))
    except (ValueError, AttributeError):
        return None

    if sayi < 0:
        return None

    return sayi


def pozitif_tam_sayi_coz(metin):
    try:
        sayi = int(metin.strip())
    except (ValueError, AttributeError):
        return None

    if sayi <= 0:
        return None

    return sayi


def kaydi_coz(kayit):
    urun_metni = kayit.get("urun")
    fiyat_metni = kayit.get("fiyat")
    adet_metni = kayit.get("adet")

    if urun_metni is None or fiyat_metni is None or adet_metni is None:
        return None

    urun = urun_adi_temizle(urun_metni)
    fiyat = negatif_olmayan_sayi_coz(fiyat_metni)
    adet = pozitif_tam_sayi_coz(adet_metni)

    if urun == "" or fiyat is None or adet is None:
        return None

    return {"urun": urun, "fiyat": fiyat, "adet": adet}


def satir_toplami(kayit):
    return kayit["fiyat"] * kayit["adet"]


def en_yuksek_cirolu_urun(urun_cirolari):
    if len(urun_cirolari) == 0:
        return None

    en_urun = None
    en_ciro = None

    for urun, ciro in urun_cirolari.items():
        if en_ciro is None or ciro > en_ciro:
            en_urun = urun
            en_ciro = ciro

    return en_urun, en_ciro


def satis_raporu(ham_kayitlar):
    toplam_ciro = 0
    gecerli_sayisi = 0
    gecersiz_sayisi = 0
    urun_adetleri = {}
    urun_cirolari = {}

    for ham_kayit in ham_kayitlar:
        kayit = kaydi_coz(ham_kayit)

        if kayit is None:
            gecersiz_sayisi = gecersiz_sayisi + 1
            continue

        gecerli_sayisi = gecerli_sayisi + 1
        urun = kayit["urun"]
        adet = kayit["adet"]
        satir_cirosu = satir_toplami(kayit)

        toplam_ciro = toplam_ciro + satir_cirosu
        urun_adetleri[urun] = urun_adetleri.get(urun, 0) + adet
        urun_cirolari[urun] = urun_cirolari.get(urun, 0) + satir_cirosu

    return {
        "gecerli": gecerli_sayisi,
        "gecersiz": gecersiz_sayisi,
        "ciro": toplam_ciro,
        "urun_adetleri": urun_adetleri,
        "urun_cirolari": urun_cirolari,
        "lider": en_yuksek_cirolu_urun(urun_cirolari),
    }
