// ========================================
// 認証・クラウド同期ロジック (Firebase)
// ========================================

/**
 * 新規ユーザー登録
 */
const registerUser = async (email, password) => {
  try {
    const userCredential = await window.firebase_auth.createUserWithEmailAndPassword(email, password);
    return { user: userCredential.user, error: null };
  } catch (error) {
    console.error("Registration Error:", error);
    return { user: null, error: translateFirebaseError(error.code) };
  }
};

/**
 * ログイン
 */
const loginUser = async (email, password) => {
  try {
    const userCredential = await window.firebase_auth.signInWithEmailAndPassword(email, password);
    return { user: userCredential.user, error: null };
  } catch (error) {
    console.error("Login Error:", error);
    return { user: null, error: translateFirebaseError(error.code) };
  }
};

/**
 * ログアウト
 */
const logoutUser = async () => {
  try {
    await window.firebase_auth.signOut();
    return { error: null };
  } catch (error) {
    return { error: error.message };
  }
};

/**
 * クラウドへセーブデータをアップロード
 */
const uploadSaveToCloud = async (userId, saveData) => {
  if (!userId) return;
  try {
    await window.firebase_db.collection("users").doc(userId).set({
      saveData: JSON.stringify(saveData),
      updatedAt: firebase.firestore.FieldValue.serverTimestamp()
    });
    console.log("Cloud save successful");
  } catch (error) {
    console.error("Cloud save error:", error);
  }
};

/**
 * クラウドからセーブデータを取得
 */
const downloadSaveFromCloud = async (userId) => {
  if (!userId) return null;
  try {
    const doc = await window.firebase_db.collection("users").doc(userId).get();
    if (doc.exists) {
      return JSON.parse(doc.data().saveData);
    }
    return null;
  } catch (error) {
    console.error("Cloud download error:", error);
    return null;
  }
};

/**
 * Firebaseのエラーコードを日本語に翻訳
 */
const translateFirebaseError = (code) => {
  switch (code) {
    case 'auth/email-already-in-use':
      return 'このメールアドレスは既に使用されています。';
    case 'auth/invalid-email':
      return 'メールアドレスの形式が正しくありません。';
    case 'auth/operation-not-allowed':
      return 'メール/パスワード認証が有効になっていません。';
    case 'auth/weak-password':
      return 'パスワードが短すぎます（最低6文字必要です）。';
    case 'auth/user-disabled':
      return 'このユーザーは無効化されています。';
    case 'auth/user-not-found':
      return 'ユーザーが見つかりません。';
    case 'auth/wrong-password':
      return 'パスワードが間違っています。';
    default:
      return '認証エラーが発生しました。時間を置いて再度お試しください。';
  }
};
