import pandas as pd
import os

# --- USTAWIENIA ---
nazwa_pliku_wejsciowego = 'cristadur cechy.xlsx'
nazwa_pliku_wyjsciowego = 'cristadur_nowy.xlsx'

# --- NAGŁÓWEK DLA NOWEGO PLIKU ---
# Pierwszy wiersz w każdym arkuszu nowego pliku będzie zawierał te nazwy kolumn.
nowy_naglowek = [
    "ID", 
    "Aktywny (0 lub 1)", 
    "Nazwa*", 
    "Kategorie (x,y,z...)",
    "Cena bez podatku. (netto)", 
    "Cena zawiera podatek. (brutto)",
    "ID reguły podatku", 
    "Koszt własny", 
    "W sprzedaży (0 lub 1)",
    "Wartość rabatu", 
    "Procent rabatu", 
    "Rabat od dnia (rrrr-mm-dd)",
    "Rabat do dnia (rrrr-mm-dd)", 
    "Indeks #", 
    "Kod dostawcy", 
    "Dostawca",
    "Marka", 
    "EAN-13", 
    "Kod kreskowy UPC", 
    "MPN", 
    "Podatek ekologiczny",
    "Szerokość", 
    "Wysokość", 
    "Głębokość", 
    "Waga",
    "Czas dostawy produktów dostępnych w magazynie:",
    "Czas dostawy wyprzedanych produktów z możliwością rezerwacji:",
    "Ilość", 
    "Minimalna ilość", 
    "Niski poziom produktów w magazynie",
    "Otrzymuj powiadomienie o niskim stanie magazynowym", 
    "Miejsce magazynowania",
    "Widoczność", 
    "Dodatkowe koszty przesyłki", 
    "Jednostka dla ceny za jednostkę",
    "Cena za jednostkę", 
    "Podsumowanie", 
    "Opis", 
    "Tagi (x,y,z...)",
    "Meta-tytuł", 
    "Opis meta", 
    "Przepisany URL", 
    "Etykieta, gdy w magazynie",
    "Etykieta kiedy dozwolone ponowne zamówienie", 
    "Dostępne do zamówienia (0 = Nie, 1 = Tak)",
    "Data dostępności produktu", 
    "Data wytworzenia produktu", 
    "Pokaż cenę (0 = Nie, 1 = Tak)",
    "Adresy URL zdjęcia (x,y,z...)", 
    "Tekst alternatywny dla zdjęć (x,y,z...)",
    "Usuń istniejące zdjęcia (0 = Nie, 1 = Tak)",
    "Cecha(Nazwa:Wartość:Pozycja:Indywidualne)", 
    "Dostępne tylko online (0 = Nie, 1 = Tak)",
    "Stan:", 
    "Konfigurowalny (0 = Nie, 1 = Tak)", 
    "Można wgrywać pliki (0 = Nie, 1 = Tak)",
    "Pola tekstowe (0 = Nie, 1 = Tak)", 
    "Akcja kiedy brak na stanie",
    "Wirtualny produkt (0 = No, 1 = Yes)", 
    "Adres URL pliku",
    "Ilość dozwolonych pobrań", 
    "Data wygaśnienia (rrrr-mm-dd)", 
    "Liczba dni",
    "ID / Nazwa sklepu", 
    "Akcesoria (x,y,z...)"
]

# --- MAPOWANIE KOLUMN ---
# Słownik mapowania: {indeks_starej_kolumny: [indeksy_nowych_kolumn]}
# Indeksy liczone od 0 (A=0, B=1, ..., AP=41, itd.)
mapowanie = {
    0: [0],      # A > A
    1: [1],      # B > B
    2: [2],      # C > C
    3: [3],      # D > D
    4: [4],      # E > E
    5: [5],      # F > F
    8: [8],      # I > I
    11: [11],    # L > L
    25: [32],    # Z > AF
    29: [36],    # AD > AJ
    30: [37],    # AE > AK
    31: [38],    # AF > AL
    32: [39],    # AG > AM
    34: [40],    # AI > AN
    35: [41],    # AJ > AO
    38: [44],    # AJ > AO
    40: [46],    # AO > AT
    41: [47], # AP > AR oraz AP > AU
    42: [48],    # AQ > AV
    43: [50],    # AR > AY (Nowa kolumna AY ma indeks 49)
    44: [51],    # AS > AZ (Nowa kolumna AZ ma indeks 50)
    45: [52]     # AT > AX (Nowa kolumna AX ma indeks 48)
}

def konwertuj_excel():
    """Główna funkcja do przetwarzania pliku."""
    if not os.path.exists(nazwa_pliku_wejsciowego):
        print(f"BŁĄD: Nie znaleziono pliku '{nazwa_pliku_wejsciowego}'.")
        print("Upewnij się, że plik znajduje się w tym samym folderze co skrypt.")
        return

    try:
        stary_excel = pd.ExcelFile(nazwa_pliku_wejsciowego)
        nazwy_arkuszy = stary_excel.sheet_names
        print(f"Znaleziono {len(nazwy_arkuszy)} arkuszy: {', '.join(nazwy_arkuszy)}")

        with pd.ExcelWriter(nazwa_pliku_wyjsciowego, engine='openpyxl') as writer:
            for arkusz in nazwy_arkuszy:
                print(f"-> Przetwarzanie arkusza: '{arkusz}'...")
                
                # Wczytanie danych z pominięciem pierwszego wiersza (nagłówka)
                df_stary = pd.read_excel(stary_excel, sheet_name=arkusz, header=None, skiprows=1)
                
                # Jeśli po pominięciu nagłówka arkusz jest pusty, przejdź do następnego
                if df_stary.empty:
                    print(f"  > Ostrzeżenie: Arkusz '{arkusz}' jest pusty po pominięciu nagłówka. Zostanie utworzony pusty arkusz z nowym nagłówkiem.")
                
                df_nowy = pd.DataFrame(index=df_stary.index, columns=range(len(nowy_naglowek)))

                for stary_idx, lista_nowych_idx in mapowanie.items():
                    if stary_idx < df_stary.shape[1]:
                        for nowy_idx in lista_nowych_idx:
                            # Ta linia odpowiada za kopiowanie danych
                            df_nowy.iloc[:, nowy_idx] = df_stary.iloc[:, stary_idx].values
                    else:
                        print(f"  > Ostrzeżenie: W arkuszu '{arkusz}' brakuje kolumny źródłowej o indeksie {stary_idx}.")

                df_nowy.columns = nowy_naglowek
                df_nowy.to_excel(writer, sheet_name=arkusz, index=False)

        print(f"\n Sukces! Plik '{nazwa_pliku_wyjsciowego}' został pomyślnie utworzony.")

    except Exception as e:
        print(f"Wystąpił nieoczekiwany błąd: {e}")

if __name__ == "__main__":
    konwertuj_excel()