import tkinter as tk
from tkinter import messagebox
from datetime import datetime
from openpyxl import Workbook
from openpyxl.styles import NamedStyle

def faiz_hesapla(anapara, baslangic_tarihi, bitis_tarihi):
    faiz_oranlari = [
        ((datetime.strptime('22.10.1996', '%d.%m.%Y'), datetime.strptime('09.07.1998', '%d.%m.%Y')), 1.20),
        ((datetime.strptime('10.07.1998', '%d.%m.%Y'), datetime.strptime('24.01.2000', '%d.%m.%Y')), 0.96),
        ((datetime.strptime('25.01.2000', '%d.%m.%Y'), datetime.strptime('20.12.2000', '%d.%m.%Y')), 0.48),
        ((datetime.strptime('21.12.2000', '%d.%m.%Y'), datetime.strptime('30.03.2001', '%d.%m.%Y')), 0.36),
        ((datetime.strptime('31.03.2001', '%d.%m.%Y'), datetime.strptime('01.02.2002', '%d.%m.%Y')), 0.72),
        ((datetime.strptime('02.02.2002', '%d.%m.%Y'), datetime.strptime('11.11.2003', '%d.%m.%Y')), 0.60),
        ((datetime.strptime('12.11.2003', '%d.%m.%Y'), datetime.strptime('03.03.2005', '%d.%m.%Y')), 0.36),
        ((datetime.strptime('04.03.2005', '%d.%m.%Y'), datetime.strptime('27.04.2006', '%d.%m.%Y')), 0.30),
        ((datetime.strptime('28.04.2006', '%d.%m.%Y'), datetime.strptime('20.11.2009', '%d.%m.%Y')), 0.24),
        ((datetime.strptime('21.11.2009', '%d.%m.%Y'), datetime.strptime('20.10.2010', '%d.%m.%Y')), 0.19),
        ((datetime.strptime('21.10.2010', '%d.%m.%Y'), datetime.strptime('05.09.2018', '%d.%m.%Y')), 0.12),
        ((datetime.strptime('06.09.2018', '%d.%m.%Y'), datetime.strptime('24.10.2019', '%d.%m.%Y')), 0.22),
        ((datetime.strptime('25.10.2019', '%d.%m.%Y'), datetime.strptime('29.12.2019', '%d.%m.%Y')), 0.19),
        ((datetime.strptime('30.12.2019', '%d.%m.%Y'), datetime.strptime('20.07.2022', '%d.%m.%Y')), 0.15),
        ((datetime.strptime('21.07.2022', '%d.%m.%Y'), datetime.strptime('13.11.2023', '%d.%m.%Y')), 0.24),
        ((datetime.strptime('14.11.2023', '%d.%m.%Y'), datetime.max), 0.36)
    ]
    
    faiz_araliklari = {}
    
    toplam_faiz = 0
    for (baslangic, bitis), faiz_orani in faiz_oranlari:
        if baslangic_tarihi <= bitis and bitis_tarihi >= baslangic:
            baslangic_t = max(baslangic_tarihi, baslangic)
            bitis_t = min(bitis_tarihi, bitis)
            gun_farki = (bitis_t - baslangic_t).days
            faiz_miktari = (anapara * faiz_orani * gun_farki) / 365
            toplam_faiz += faiz_miktari
            faiz_araliklari[(baslangic_t.strftime('%d.%m.%Y'), bitis_t.strftime('%d.%m.%Y'))] = (faiz_orani, round(faiz_miktari, 2))
            
    return toplam_faiz, faiz_araliklari

def hesapla():
    try:
        # Girişlerden verileri al
        anapara = float(anapara_entry.get())
        baslangic_tarihi = datetime.strptime(baslangic_entry.get(), '%d.%m.%Y')
        bitis_tarihi = datetime.strptime(bitis_entry.get(), '%d.%m.%Y')
        il = il_entry.get()
        ilce = ilce_entry.get()
        koy_mah = koy_mah_entry.get()
        ada = ada_entry.get()
        parsel = parsel_entry.get()
        karar_bilgisi = karar_entry.get()
        
        # Faiz hesapla
        toplam_faiz, faiz_araliklari = faiz_hesapla(anapara, baslangic_tarihi, bitis_tarihi)
        
        # Excel dosyasını oluştur
        wb = Workbook()
        ws = wb.active
        
        # Başlıkları ekle
        ws.append(["İl", "İlçe", "Köy/Mah", "Ada", "Parsel"])
        ws.append([il, ilce, koy_mah, ada, parsel])
        
        # Boş satır ekle
        ws.append([])
        
        # Faiz bilgilerini ekle
        ws.append(["Anapara", "Başlangıç Tarihi", "Bitiş Tarihi", "Faiz Oranı", "Faiz Miktarı"])
        for aralik, (oran, miktar) in faiz_araliklari.items():
            ws.append([anapara, aralik[0], aralik[1], oran, miktar])
        
        # Anapara, faizler için hücre biçimlerini ayarla
        for row in ws.iter_rows(min_row=2, max_row=ws.max_row, min_col=1, max_col=1):
            for cell in row:
                cell.number_format = '#,##0.00 TL'

        for row in ws.iter_rows(min_row=2, max_row=ws.max_row, min_col=5, max_col=5):
            for cell in row:
                cell.number_format = '#,##0.00 TL'

        # Toplam faiz miktarını ekle ve biçimlendir
        ws.append(["", "", "", "Toplam Faiz", round(toplam_faiz, 2)])
        ws.cell(row=ws.max_row, column=5).number_format = '#,##0.00 TL'
        
        # Karar Bilgisi ekle
        ws.append([""])
        ws.append(["Karar Bilgisi:"])
        ws.append([karar_bilgisi])
        
        # Dosyayı kaydet
        dosya_adi = "faiz_raporu.xlsx"
        wb.save(dosya_adi)
        
        messagebox.showinfo("Başarılı", f"Excel dosyası '{dosya_adi}' olarak kaydedildi.")
    except Exception as e:
        messagebox.showerror("Hata", f"Bir hata oluştu: {str(e)}")

# Hakkında kısmı
def hakkinda():
    messagebox.showinfo("Hakkında","Hazırlayan: Ertan Taner Tunç - ettunc.com")

# Tkinter penceresi oluşturma
root = tk.Tk()
root.title("Faiz Hesaplama")

# Etiketler
tk.Label(root, text="Anapara:").grid(row=0, column=0, padx=5, pady=5)
tk.Label(root, text="Başlangıç Tarihi (GG.AA.YYYY):").grid(row=1, column=0, padx=5, pady=5)
tk.Label(root, text="Bitiş Tarihi (GG.AA.YYYY):").grid(row=2, column=0, padx=5, pady=5)
tk.Label(root, text="İl:").grid(row=3, column=0, padx=5, pady=5)
tk.Label(root, text="İlçe:").grid(row=4, column=0, padx=5, pady=5)
tk.Label(root, text="Köy/Mah:").grid(row=5, column=0, padx=5, pady=5)
tk.Label(root, text="Ada:").grid(row=6, column=0, padx=5, pady=5)
tk.Label(root, text="Parsel:").grid(row=7, column=0, padx=5, pady=5)
tk.Label(root, text="Karar Bilgisi:").grid(row=8, column=0, padx=5, pady=5)

# Giriş kutuları
anapara_entry = tk.Entry(root)
baslangic_entry = tk.Entry(root)
bitis_entry = tk.Entry(root)
il_entry = tk.Entry(root)
ilce_entry = tk.Entry(root)
koy_mah_entry = tk.Entry(root)
ada_entry = tk.Entry(root)
parsel_entry = tk.Entry(root)
karar_entry = tk.Entry(root)
anapara_entry.grid(row=0, column=1, padx=5, pady=5)
baslangic_entry.grid(row=1, column=1, padx=5, pady=5)
bitis_entry.grid(row=2, column=1, padx=5, pady=5)
il_entry.grid(row=3, column=1, padx=5, pady=5)
ilce_entry.grid(row=4, column=1, padx=5, pady=5)
koy_mah_entry.grid(row=5, column=1, padx=5, pady=5)
ada_entry.grid(row=6, column=1, padx=5, pady=5)
parsel_entry.grid(row=7, column=1, padx=5, pady=5)
karar_entry.grid(row=8, column=1, padx=5, pady=5)

# Hesapla düğmesi
hesapla_button = tk.Button(root, text="Hesapla", command=hesapla)
hesapla_button.grid(row=9, column=0, columnspan=2, padx=5, pady=5)

# Hakkında düğmesi
hakkinda_button = tk.Button(root, text="Hakkında", command=hakkinda)
hakkinda_button.grid(row=9, column=1, columnspan=2, padx=5, pady=5)

root.mainloop()
