import app_settings
import segno

class QRcodeGenerator:
    def __init__(self):
        self.iban = app_settings.IBAN
        self.filepath = app_settings.QR_FILEPATH
        self.receipt_name = app_settings.RECEIPT_NAME
        self.recipient_address = app_settings.RECEIPT_ADDRESS
        self.recipient_city = app_settings.RECEIPT_CITY
        self.model = app_settings.MODEL
        self.purpose = app_settings.PURPOSE
        self.currency = app_settings.CURRENCY
        self.scale = 8
    def generate_hub3_qr(
        self,
        amount: float,
        reference: str,
        description: str,
        event_id: int
    ):
        """
        Generira HUB-3 2D barkod kompatibilan sa ZABA, PBZ, Erste, RBA, HPB.
        - amount u eurima (float)
        - reference = poziv na broj (npr. HR99-2026-0001)
        - description = opis plaćanja (linija 14)
        """
        
        # Iznos u centima, 11 znamenki
        amount_cents = f"{int(round(amount * 100)):011d}"
        #iban = self.iban
        """ recipient_name = self.receipt_name
        recipient_address = self.recipient_address
        recipient_city = self.recipient_city
        model = self.model """
        

        # HUB-3 payload (14 redaka)
        lines = [
            "HRVHUB30",                   # 1. header
            self.currency,                      # 2. valuta
            amount_cents,                  # 3. iznos u centima
            "-",                           # 4. platitelj ime (prazno)
            "-",                           # 5. platitelj adresa
            "-",                           # 6. platitelj mjesto
            self.recipient_name[:25],      # 7. primatelj ime
            self.recipient_address[:25],   # 8. primatelj adresa
            self.recipient_city[:25],      # 9. primatelj mjesto
            self.iban.replace(" ", ""),    # 10. IBAN primatelja
            self.model,                    # 11. model (HR00, HR01, ...)
            reference[:25],                # 12. poziv na broj
            self.purpose,                  # 13. šifra namjene (OTHR, GDDS,...)
            description[:35]               # 14. opis plaćanja
        ]

        ret = {}
        ret['error'] = None
        try:
            # ZABA i ostale banke zahtijevaju CRLF redove
            payload = "\r\n".join(lines)

            # Generiranje QR koda
            qr = segno.make(payload)
            filename = "QRcode_" + str(event_id) + ".png"
            filepath = self.filepath + filename
            qr.save(filepath, scale=self.scale)
            ret['filename'] = filename
        except:
            ret['error'] = "ERROR"

        return ret

""" qr_data = generate_hub3_qr(
    iban="HR5123600001102889161",
    amount=45.00,
    recipient_name="KAMAREDO OBRT, VL. RENATA MILKOVIC",
    recipient_address="Rujanska 15",
    recipient_city="ZAGREB",
    reference="2026-015",
    description="SPA zona rezervacija broj: 15",
    filename="qr_15.png"
) """

#print(qr_data)

