from PySide6.QtWidgets import QDialog, QHBoxLayout, QLabel, QLineEdit, QPushButton, QVBoxLayout


class PembayaranAdminDialogService:
    def __init__(self, validator):
        self.validator = validator

    def verify(self, parent, warn_callback, return_admin_name=False):
        dialog = QDialog(parent)
        dialog.setWindowTitle("Verifikasi Admin")
        layout = QVBoxLayout()
        layout.addWidget(QLabel("Admin:"))
        admin_input = QLineEdit()
        admin_input.setPlaceholderText("Masukkan username admin (nama_login)")
        layout.addWidget(admin_input)
        layout.addWidget(QLabel("Password:"))
        password_input = QLineEdit()
        password_input.setEchoMode(QLineEdit.Password)
        password_input.setPlaceholderText("Masukkan password admin")
        layout.addWidget(password_input)

        button_layout = QHBoxLayout()
        cancel_button = QPushButton("BATAL")
        lanjut_button = QPushButton("LANJUTKAN")
        button_layout.addStretch()
        button_layout.addWidget(cancel_button)
        button_layout.addWidget(lanjut_button)
        layout.addLayout(button_layout)
        dialog.setLayout(layout)
        cancel_button.clicked.connect(dialog.reject)

        def handle_lanjutkan():
            admin_name = admin_input.text().strip()
            is_valid, message = self.validator(admin_name, password_input.text())
            if not is_valid:
                warn_callback("Validasi", message, dialog)
                return
            dialog.accept()

        lanjut_button.clicked.connect(handle_lanjutkan)
        lanjut_button.setDefault(True)
        lanjut_button.setAutoDefault(True)
        accepted = dialog.exec() == QDialog.Accepted
        if not accepted:
            return None if return_admin_name else False
        if return_admin_name:
            return admin_input.text().strip()
        return True
