@app.route('/generate-cards-batch', methods=['POST'])
def generate_cards_batch():
    """Generate multiple ID cards in one PDF"""
    try:
        data = request.json
        employees = data.get('employees', [])
        
        if not employees:
            return jsonify({'error': 'No employees data provided'}), 400
        
        # Create a buffer for the combined PDF
        buffer = io.BytesIO()
        
        # Create a canvas with A4 size for multiple cards
        from reportlab.lib.pagesizes import A4
        c = canvas.Canvas(buffer, pagesize=A4)
        
        # Calculate positions for multiple cards on A4
        card_width = 85.6 * mm
        card_height = 54 * mm
        margin_x = 10 * mm
        margin_y = 10 * mm
        cards_per_row = 2
        cards_per_column = 4
        x_spacing = 5 * mm
        y_spacing = 5 * mm
        
        for i, employee in enumerate(employees):
            if i > 0 and i % (cards_per_row * cards_per_column) == 0:
                c.showPage()  # New page
            
            row = (i % (cards_per_row * cards_per_column)) // cards_per_row
            col = i % cards_per_row
            
            x = margin_x + col * (card_width + x_spacing)
            y = A4[1] - margin_y - (row + 1) * card_height - row * y_spacing
            
            # Draw single card
            draw_id_card(c, employee, x, y, card_width, card_height)
        
        c.save()
        buffer.seek(0)
        
        return send_file(
            buffer,
            mimetype='application/pdf',
            as_attachment=True,
            download_name='ID_Cards_Batch.pdf'
        )
        
    except Exception as e:
        return jsonify({'error': str(e)}), 500

def draw_id_card(canvas_obj, data, x, y, width, height):
    """Draw a single ID card at specified position"""
    from reportlab.lib.colors import HexColor
    
    # Save state
    canvas_obj.saveState()
    
    # Colors
    RED = HexColor('#e74c3c')
    WHITE = HexColor('#ffffff')
    BLACK = HexColor('#000000')
    GRAY = HexColor('#666666')
    
    # White background
    canvas_obj.setFillColor(WHITE)
    canvas_obj.rect(x, y, width, height, fill=1, stroke=1)
    
    # Top red header
    canvas_obj.setFillColor(RED)
    canvas_obj.rect(x, y + height - 10*mm, width, 10*mm, fill=1, stroke=0)
    
    # Company name
    canvas_obj.setFillColor(WHITE)
    try:
        canvas_obj.setFont("Bengali", 8)
    except:
        canvas_obj.setFont("Helvetica-Bold", 8)
    canvas_obj.drawString(x + width/2 - 15*mm, y + height - 7*mm, "মা এন্টারপ্রাইজ")
    
    # ID number
    canvas_obj.setFont("Helvetica-Bold", 6)
    canvas_obj.drawRightString(x + width - 3*mm, y + height - 3*mm, f"ID: {data.get('id_no', '')}")
    
    # Photo area
    photo_x = x + 3*mm
    photo_y = y + 10*mm
    photo_w = 18*mm
    photo_h = 22*mm
    
    canvas_obj.setStrokeColor(GRAY)
    canvas_obj.setLineWidth(0.3)
    canvas_obj.rect(photo_x, photo_y, photo_w, photo_h, fill=0, stroke=1)
    canvas_obj.setFont("Helvetica", 5)
    canvas_obj.setFillColor(GRAY)
    canvas_obj.drawString(photo_x + 5*mm, photo_y + photo_h/2, "Photo")
    
    # Employee info
    info_x = photo_x + photo_w + 3*mm
    info_y = y + height - 18*mm
    
    canvas_obj.setFillColor(BLACK)
    try:
        canvas_obj.setFont("Bengali", 7)
    except:
        canvas_obj.setFont("Helvetica", 7)
    
    canvas_obj.drawString(info_x, info_y, f"নাম: {data.get('name', '')}")
    
    canvas_obj.setFont("Helvetica", 6)
    canvas_obj.drawString(info_x, info_y - 5*mm, f"পদবি: {data.get('designation', '')}")
    canvas_obj.drawString(info_x, info_y - 10*mm, f"বিভাগ: {data.get('department', '')}")
    canvas_obj.drawString(info_x, info_y - 15*mm, f"যোগদান: {data.get('joining_date', '')}")
    
    # Footer
    canvas_obj.setFont("Helvetica", 4)
    canvas_obj.setFillColor(GRAY)
    canvas_obj.drawString(x + 3*mm, y + 6*mm, "ঠিকানা: বক্তারপুর, কালিয়াকৈর, গাজীপুর")
    canvas_obj.drawString(x + 3*mm, y + 3*mm, "মোবাইল: 01711-174318")
    
    # QR Code
    try:
        qr_size = 10*mm
        qr_x = x + width - qr_size - 3*mm
        qr_y = y + 2*mm
        
        qr = qrcode.QRCode(version=1, box_size=2, border=1)
        qr_text = f"ID: {data.get('id_no')}\nName: {data.get('name')}"
        qr.add_data(qr_text)
        qr.make(fit=True)
        qr_img = qr.make_image(fill_color="black", back_color="white")
        
        qr_path = f"temp_qr_{data.get('id_no')}.png"
        qr_img.save(qr_path)
        
        canvas_obj.drawImage(qr_path, qr_x, qr_y, width=qr_size, height=qr_size)
        
        if os.path.exists(qr_path):
            os.remove(qr_path)
    except:
        pass
    
    # Restore state
    canvas_obj.restoreState()