-- users
CREATE TABLE users (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  email TEXT UNIQUE NOT NULL,
  password_hash TEXT NOT NULL,
  full_name TEXT,
  role TEXT DEFAULT 'student', -- student | teacher | admin
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
 
-- subjects (môn học /categories)
CREATE TABLE subjects (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  name TEXT NOT NULL,
  color TEXT,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
 
-- tasks: công việc học tập / bài tập
CREATE TABLE tasks (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  title TEXT NOT NULL,
  description TEXT,
  subject_id INTEGER,
  owner_id INTEGER NOT NULL, -- người tạo
  assignee_id INTEGER,       -- người được giao (có thể null)
  due_date TIMESTAMP,
  priority INTEGER DEFAULT 2, -- 1 low,2 medium,3 high
  status TEXT DEFAULT 'todo', -- todo | in_progress | done | archived
  reminder TIMESTAMP,         -- thời gian nhắc nhở
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY(subject_id) REFERENCES subjects(id),
  FOREIGN KEY(owner_id) REFERENCES users(id),
  FOREIGN KEY(assignee_id) REFERENCES users(id)
);
 
-- attachments (tài liệu đính kèm)
CREATE TABLE attachments (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  task_id INTEGER NOT NULL,
  filename TEXT NOT NULL,
  file_path TEXT NOT NULL,
  uploaded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY(task_id) REFERENCES tasks(id)
);
 
-- grades / đánh giá (tuỳ chọn)
CREATE TABLE grades (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  task_id INTEGER NOT NULL,
  student_id INTEGER NOT NULL,
  score REAL,
  feedback TEXT,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY(task_id) REFERENCES tasks(id),
  FOREIGN KEY(student_id) REFERENCES users(id)
);
				LS0gdXNlcnMKQ1JFQVRFIFRBQkxFIHVzZXJzICgKICBpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsCiAgZW1haWwgVEVYVCBVTklRVUUgTk9UIE5VTEwsCiAgcGFzc3dvcmRfaGFzaCBURVhUIE5PVCBOVUxMLAogIGZ1bGxfbmFtZSBURVhULAogIHJvbGUgVEVYVCBERUZBVUxUICdzdHVkZW50JywgLS0gc3R1ZGVudCB8IHRlYWNoZXIgfCBhZG1pbgogIGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAsCiAgdXBkYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUAopOwoKLS0gc3ViamVjdHMgKG3DtG4gaOG7jWMgL2NhdGVnb3JpZXMpCkNSRUFURSBUQUJMRSBzdWJqZWN0cyAoCiAgaWQgSU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULAogIG5hbWUgVEVYVCBOT1QgTlVMTCwKICBjb2xvciBURVhULAogIGNyZWF0ZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAKKTsKCi0tIHRhc2tzOiBjw7RuZyB2aeG7h2MgaOG7jWMgdOG6rXAgLyBiw6BpIHThuq1wCkNSRUFURSBUQUJMRSB0YXNrcyAoCiAgaWQgSU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULAogIHRpdGxlIFRFWFQgTk9UIE5VTEwsCiAgZGVzY3JpcHRpb24gVEVYVCwKICBzdWJqZWN0X2lkIElOVEVHRVIsCiAgb3duZXJfaWQgSU5URUdFUiBOT1QgTlVMTCwgLS0gbmfGsOG7nWkgdOG6oW8KICBhc3NpZ25lZV9pZCBJTlRFR0VSLCAgICAgICAtLSBuZ8aw4budaSDEkcaw4bujYyBnaWFvIChjw7MgdGjhu4MgbnVsbCkKICBkdWVfZGF0ZSBUSU1FU1RBTVAsCiAgcHJpb3JpdHkgSU5URUdFUiBERUZBVUxUIDIsIC0tIDEgbG93LDIgbWVkaXVtLDMgaGlnaAogIHN0YXR1cyBURVhUIERFRkFVTFQgJ3RvZG8nLCAtLSB0b2RvIHwgaW5fcHJvZ3Jlc3MgfCBkb25lIHwgYXJjaGl2ZWQKICByZW1pbmRlciBUSU1FU1RBTVAsICAgICAgICAgLS0gdGjhu51pIGdpYW4gbmjhuq9jIG5o4bufCiAgY3JlYXRlZF9hdCBUSU1FU1RBTVAgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCwKICB1cGRhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QLAogIEZPUkVJR04gS0VZKHN1YmplY3RfaWQpIFJFRkVSRU5DRVMgc3ViamVjdHMoaWQpLAogIEZPUkVJR04gS0VZKG93bmVyX2lkKSBSRUZFUkVOQ0VTIHVzZXJzKGlkKSwKICBGT1JFSUdOIEtFWShhc3NpZ25lZV9pZCkgUkVGRVJFTkNFUyB1c2VycyhpZCkKKTsKCi0tIGF0dGFjaG1lbnRzICh0w6BpIGxp4buHdSDEkcOtbmgga8OobSkKQ1JFQVRFIFRBQkxFIGF0dGFjaG1lbnRzICgKICBpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsCiAgdGFza19pZCBJTlRFR0VSIE5PVCBOVUxMLAogIGZpbGVuYW1lIFRFWFQgTk9UIE5VTEwsCiAgZmlsZV9wYXRoIFRFWFQgTk9UIE5VTEwsCiAgdXBsb2FkZWRfYXQgVElNRVNUQU1QIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAsCiAgRk9SRUlHTiBLRVkodGFza19pZCkgUkVGRVJFTkNFUyB0YXNrcyhpZCkKKTsKCi0tIGdyYWRlcyAvIMSRw6FuaCBnacOhICh0deG7syBjaOG7jW4pCkNSRUFURSBUQUJMRSBncmFkZXMgKAogIGlkIElOVEVHRVIgUFJJTUFSWSBLRVkgQVVUT0lOQ1JFTUVOVCwKICB0YXNrX2lkIElOVEVHRVIgTk9UIE5VTEwsCiAgc3R1ZGVudF9pZCBJTlRFR0VSIE5PVCBOVUxMLAogIHNjb3JlIFJFQUwsCiAgZmVlZGJhY2sgVEVYVCwKICBjcmVhdGVkX2F0IFRJTUVTVEFNUCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QLAogIEZPUkVJR04gS0VZKHRhc2tfaWQpIFJFRkVSRU5DRVMgdGFza3MoaWQpLAogIEZPUkVJR04gS0VZKHN0dWRlbnRfaWQpIFJFRkVSRU5DRVMgdXNlcnMoaWQpCik7