package ru.kayashov.bar.bot.domain.command.impl;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import ru.kayashov.bar.bot.annotation.CommandData;
import ru.kayashov.bar.bot.domain.command.api.Command;
import ru.kayashov.bar.bot.domain.methods.AbstractMethod;
import ru.kayashov.bar.bot.domain.model.AbstractChat;
import ru.kayashov.bar.bot.domain.model.AbstractUpdate;
import ru.kayashov.bar.model.entity.Visitor;
import ru.kayashov.bar.repository.VisitorsRepository;

import java.util.Base64;
import java.util.List;
import java.util.Optional;
import java.util.Random;

import static ru.kayashov.bar.bot.domain.utils.MethodUtils.sendMessage;

@Component
@CommandData(name = "\uD83D\uDD11 Вход")
@RequiredArgsConstructor
public class LoginCommand implements Command {

    private final VisitorsRepository visitorsRepository;

    @Override
    public List<? extends AbstractMethod> execute(AbstractUpdate abstractUpdate) {
        AbstractChat chat = abstractUpdate.getMessage().getChat();
        Random random = new Random();
        final Integer code = random.nextInt(1010, 9999);

        Optional<Visitor> visitorOpt = visitorsRepository.findById(chat.getId());
        if (visitorOpt.isPresent()) {
            Visitor visitor = visitorOpt.get();
            visitor.setCode(code);
            visitorsRepository.save(visitor);
            String responseCode = chat.getId() + ":" + code;
            responseCode = Base64.getEncoder().encodeToString(responseCode.getBytes());

            String message = "Скопируйте код: <code>" + responseCode + "</code> или "
                    + "<a href=\"https://bar.kayashov.keenetic.pro/tg?code=" + responseCode
                    + "\">перейдите по ссылке</a>";
            return List.of(sendMessage(chat.getId(), message));
        }
        String errorMessage = "Не удалось найти вас в системе. Попробуйте выполнить команду /start";
        return List.of(sendMessage(chat.getId(), errorMessage));
    }
}
