import MyTischtennis from '../models/MyTischtennis.js';
import myTischtennisClient from '../clients/myTischtennisClient.js';

class MyTischtennisSessionService {
  async saveSessionFromCookie(userId, cookieString) {
    const tokenMatch = cookieString.match(/sb-10-auth-token=base64-([^;]+)/);
    if (!tokenMatch) {
      throw new Error('Token-Format ungültig');
    }

    const base64Token = tokenMatch[1];
    const decodedToken = Buffer.from(base64Token, 'base64').toString('utf-8');
    const tokenData = JSON.parse(decodedToken);

    const myTischtennisAccount = await MyTischtennis.findOne({ where: { userId } });
    if (!myTischtennisAccount) {
      return;
    }

    myTischtennisAccount.accessToken = tokenData.access_token;
    myTischtennisAccount.refreshToken = tokenData.refresh_token;
    myTischtennisAccount.expiresAt = tokenData.expires_at;
    myTischtennisAccount.cookie = cookieString.split(';')[0].trim();
    myTischtennisAccount.userData = tokenData.user;
    myTischtennisAccount.lastLoginSuccess = new Date();
    myTischtennisAccount.lastLoginAttempt = new Date();

    const profileResult = await myTischtennisClient.getUserProfile(myTischtennisAccount.cookie);
    if (profileResult.success) {
      myTischtennisAccount.clubId = profileResult.clubId;
      myTischtennisAccount.clubName = profileResult.clubName;
      myTischtennisAccount.fedNickname = profileResult.fedNickname;
    }

    await myTischtennisAccount.save();
  }
}

export default new MyTischtennisSessionService();
