import axios from 'axios'
import FormData from 'form-data';
import redis from "../infrastructure/redisSetup.js";

export default class RollCall {
  async login({ nationalId , password  }) {
    let bodyFormData = new FormData();

    bodyFormData.append('dir', '');
    bodyFormData.append('kindlogin', '');
    bodyFormData.append('uname', nationalId);
    bodyFormData.append('passcode', password);

    const result = await axios({
      method: 'POST',
      url: 'https://tap.sanaoffice.ir/load/login',
      data: bodyFormData,
      headers: { 'Content-Type': `multipart/form-data; boundary=${bodyFormData._boundary}` },
      validateStatus: null,
    })

    await redis.set(`sanaOffice_${nationalId}`, JSON.stringify(result.headers['set-cookie']))

    return result.error ?
        {
          error: result.error,
          statusCode: result.status,
          message: result.error?.message
              ||
              "خطا در لاگین"
        } : { message: "success" };
  }

  async operation({nationalId, enter}) {
    let cookies = await redis.get(`sanaOffice_${nationalId}`);
    if (!cookies) return {statusCode:403,message:"کاربر لاگین نیست"}

    const lat = +(35.701766 + Math.random() * 0.00001).toPrecision(8)
    const lang = +(51.392069 + Math.random() * 0.00001).toPrecision(8)

    const result = await axios({
      method: 'GET',
      url: `https://tap.sanaoffice.ir/load/tap?kind=${encodeURIComponent(enter ? 'ورود' : 'خروج')}&lat=${lat}&lang=${lang}`,
      headers: {
        cookie: JSON.parse(cookies)
      },
      validateStatus: null,
    });

    console.log(result)

    return result.error ?
        {
          error: result.error,
          statusCode: result.status,
          message: result.error?.message
              ||
              "خطا در ورود"
        } : { message: "success" };
  }
}