USE adaptive_php;

INSERT INTO questions (id, type, topic, title, difficulty, explanation, code, question, options, correct_answer, task, initial_code, solution, expected_output)
VALUES
-- Easy
('vars_q1','multiple_choice','Cơ bản','Biến','easy','Biến trong PHP bắt đầu bằng dấu $.',NULL,'Ký tự nào được dùng để khai báo một biến trong PHP?',JSON_ARRAY('%','&','$','#'),'$',NULL,NULL,NULL,NULL),
('echo_q1','multiple_choice','Cơ bản','Xuất dữ liệu','easy','Lệnh `echo` dùng để xuất chuỗi, số hoặc biến ra màn hình.',NULL,'Lệnh nào dùng để xuất "Hello World" trong PHP?',JSON_ARRAY('print("Hello World");','console.log("Hello World");','echo "Hello World";','document.write("Hello World");'),'echo "Hello World";',NULL,NULL,NULL,NULL),
('comment_q1','multiple_choice','Cơ bản','Chú thích','easy','Chú thích một dòng trong PHP bắt đầu bằng `//`.',NULL,'Làm thế nào để viết chú thích một dòng trong PHP?',JSON_ARRAY('<!-- Chú thích -->','/* Chú thích */','# Chú thích','// Chú thích'),'// Chú thích',NULL,NULL,NULL,NULL), 
('interactive_echo','interactive','Tương tác Web','Lệnh Echo đầu tiên','easy','Lệnh `echo` là cách cơ bản nhất để hiển thị kết quả trong PHP.',NULL,NULL,NULL,NULL,'Hãy viết một lệnh PHP để xuất ra chuỗi "Hello, Sandbox!".','<?php\n\n// Viết code của bạn ở đây\n\n?>','echo "Hello, Sandbox!";','Hello, Sandbox!'),

-- Medium
('concat_q1','multiple_choice','Cơ bản','Nối chuỗi','medium','Toán tử nối chuỗi trong PHP là dấu chấm (.).','<?php\n$a = "Học";\n$b = "PHP";\necho $a . " " . $b;\n?>','Đoạn mã trên sẽ xuất ra kết quả gì?',JSON_ARRAY('HọcPHP','Học PHP','a b','Lỗi cú pháp'),'Học PHP',NULL,NULL,NULL,NULL),
('array_count_q1','multiple_choice','Điều khiển','Đếm phần tử mảng','medium','Hàm `count()` trả về số lượng phần tử trong một mảng.',NULL,'Hàm nào được dùng để đếm số phần tử trong mảng `$fruits`?',JSON_ARRAY('size($fruits)','length($fruits)','count($fruits)','elements($fruits)'),'count($fruits)',NULL,NULL,NULL,NULL),
('loops_q1','multiple_choice','Điều khiển','Vòng lặp Foreach','medium','Vòng lặp `foreach` hoạt động trên các mảng.',NULL,'Vòng lặp nào được thiết kế đặc biệt để lặp qua các phần tử trong một mảng?',JSON_ARRAY('for','while','do...while','foreach'),'foreach',NULL,NULL,NULL,NULL),
('post_method_q1','multiple_choice','Xử lý Form','Phương thức POST','medium','Phương thức POST gửi dữ liệu form trong body của HTTP request.',NULL,'Phương thức nào an toàn hơn để gửi mật khẩu?',JSON_ARRAY('GET','POST','Cả hai đều an toàn như nhau','Không có cái nào an toàn'),'POST',NULL,NULL,NULL,NULL),
('interactive_vars_q1','interactive','Tương tác Web','Làm việc với Biến','medium','Bạn có thể khai báo các biến và xuất chúng ra.',NULL,NULL,NULL,NULL,'Khai báo một biến `$message` với giá trị là "PHP is fun!" và sau đó xuất biến đó ra.','<?php\n\n// Khai báo biến và xuất nó\n\n?>','$message = "PHP is fun!";\necho $message;','PHP is fun!'),
('session_start_q1','multiple_choice','Quản lý Phiên','Bắt đầu một Phiên','medium','Hàm `session_start()` phải được gọi ở đầu tập lệnh.',NULL,'Hàm nào phải được gọi trước bất kỳ output nào của HTML để bắt đầu một phiên làm việc?',JSON_ARRAY('session_init()','start_session()','session_start()','$_SESSION.start()'),'session_start()',NULL,NULL,NULL,NULL),
('oop_class_q1','multiple_choice','OOP','Khởi tạo đối tượng','medium','Từ khóa `new` được dùng để tạo một thể hiện (đối tượng) của một lớp.',NULL,'Từ khóa nào được dùng để tạo một đối tượng từ một lớp?',JSON_ARRAY('new','create','object','instance'),'new',NULL,NULL,NULL,NULL),

-- Hard
('inheritance_q1','multiple_choice','OOP','Kế thừa','hard','Kế thừa cho phép một lớp con thừa hưởng các thuộc tính và phương thức từ lớp cha.','<?php\nclass Strawberry extends Fruit { ... }\n?>','Từ khóa nào cho phép một lớp kế thừa từ lớp khác?',JSON_ARRAY('inherits','extends','implements','uses'),'extends',NULL,NULL,NULL,NULL),
('include_require_q1','multiple_choice','Cơ bản','Include vs Require','hard','`require` sẽ tạo ra một lỗi nghiêm trọng (fatal error) và dừng kịch bản nếu tệp không tồn tại, trong khi `include` chỉ tạo ra một cảnh báo (warning).',NULL,'Sự khác biệt chính giữa `include` và `require` là gì?',JSON_ARRAY('`require` nhanh hơn `include`','`include` dùng cho tệp HTML, `require` dùng cho tệp PHP','`require` gây lỗi nghiêm trọng nếu tệp không tồn tại, `include` thì không','Không có sự khác biệt'),'`require` gây lỗi nghiêm trọng nếu tệp không tồn tại, `include` thì không',NULL,NULL,NULL,NULL),
('pdo_prepare_q1','multiple_choice','Kết nối CSDL','Câu lệnh Chuẩn bị','hard','Sử dụng câu lệnh chuẩn bị (prepared statements) là cách được khuyến nghị để ngăn chặn tấn công SQL injection.',NULL,'Phương thức PDO nào được sử dụng để tạo một câu lệnh chuẩn bị?',JSON_ARRAY('query()','exec()','prepare()','execute()'),'prepare()',NULL,NULL,NULL,NULL),
('pdo_fetchall_q1','multiple_choice','Kết nối CSDL','Lấy tất cả các Hàng','hard','Để lấy tất cả các hàng từ một tập kết quả dưới dạng một mảng, hãy sử dụng phương thức `fetchAll()`.',NULL,'Để lấy tất cả các kết quả từ một câu lệnh SELECT vào một mảng, bạn nên sử dụng phương thức nào?',JSON_ARRAY('fetch()','getAll()','fetchAll()','fetch_array()'),'fetchAll()',NULL,NULL,NULL,NULL),
('interactive_pdo_insert_q1','interactive','Kết nối CSDL','Thực hành Chèn Dữ liệu','hard','Chèn dữ liệu cũng sử dụng câu lệnh chuẩn bị để đảm bảo an toàn.',NULL,NULL,NULL,NULL,'Viết mã PHP để chèn một người dùng mới có email là "test@example.com" vào bảng "users".','<?php\n// Giả sử $pdo đã được kết nối\n$email = "test@example.com";\n$sql = "INSERT INTO users (email) VALUES (?)";\n\n// Chuẩn bị và thực thi câu lệnh ở đây\n\n\n echo "Người dùng đã được thêm!";\n?>','$stmt= $pdo->prepare($sql);\n$stmt->execute([$email]);','Người dùng đã được thêm!'),
('oop_constructor_q1','multiple_choice','OOP','Hàm khởi tạo','hard','Hàm khởi tạo `__construct()` được tự động gọi khi một đối tượng được tạo.',NULL,'Tên của phương thức khởi tạo trong PHP là gì?',JSON_ARRAY('__construct','__init__','Person()','constructor()'),'__construct',NULL,NULL,NULL,NULL)
ON DUPLICATE KEY UPDATE id = VALUES(id);

