MIF_E31221357/Assets/Scripts/InputUserController.cs

113 lines
3.8 KiB
C#

using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using TMPro;
using UnityEngine;
using UnityEngine.SceneManagement;
using System;
public class InputUserController : MonoBehaviour
{
public TMP_InputField inputNama;
public TMP_InputField inputKelas;
public TMP_InputField inputAbsen;
public TextMeshProUGUI infoText;
public void OnSubmitClicked()
{
if (string.IsNullOrWhiteSpace(inputNama.text) ||
string.IsNullOrWhiteSpace(inputKelas.text) ||
string.IsNullOrWhiteSpace(inputAbsen.text))
{
infoText.text = "Semua kolom wajib diisi.";
return;
}
if (!int.TryParse(inputAbsen.text.Trim(), out int absen))
{
infoText.text = "Nomor absen harus berupa angka.";
return;
}
string namaInput = inputNama.text.Trim();
string namaFormat = FormatNama(namaInput);
if (namaInput != namaFormat)
{
infoText.text = "Nama harus menggunakan format Title Case.\nContoh: Budi Setiawan";
return;
}
string username = namaFormat;
string kelas = inputKelas.text.Trim().ToUpper();
string absenStr = absen.ToString();
string kodeLogin = $"{username}_{kelas}_{absenStr}";
if (!DBManager.IsConnectedToInternet())
{
infoText.text = "Tidak ada koneksi internet.";
return;
}
infoText.text = "Mencoba login...";
// Cek apakah user sudah ada di Firebase
DBManager.SyncUserToFirebase(kodeLogin, success =>
{
if (success)
{
// Jika user ada, ambil semua datanya dari Firebase
TestManager.Instance.LoadAllUserDataFromFirebase(kodeLogin, loaded =>
{
if (loaded)
{
infoText.text = "Login berhasil!";
if (TestManager.Instance.pretestScore > 0)
SceneManager.LoadScene("Main Menu");
else
SceneManager.LoadScene("Pretest");
}
else
{
infoText.text = "Gagal memuat data user dari Firebase.";
}
});
}
else
{
infoText.text = "Akun tidak ditemukan. Mencoba mendaftarkan user baru...";
// Buat akun baru di Firebase
DBManager.CreateUser(kodeLogin, username, kelas, absenStr, created =>
{
if (created)
{
// Simpan progress level awal (1) untuk semua materi
if (LevelControl.Instance != null)
{
foreach (var pair in LevelControl.Instance.materiLevelPairs)
{
DBManager.SaveUnlockedLevel(kodeLogin, pair.materiName, 1);
}
}
// Set user data di TestManager
TestManager.Instance.SetUserData(username, 0, 0, kelas, absenStr);
infoText.text = "Pendaftaran berhasil. Lanjut ke Pretest...";
SceneManager.LoadScene("Pretest");
}
else
{
infoText.text = "Gagal mendaftarkan user. Periksa koneksi internet.";
}
});
}
});
}
private string FormatNama(string nama)
{
TextInfo textInfo = new CultureInfo("id-ID", false).TextInfo;
return textInfo.ToTitleCase(nama.ToLower());
}
}