package com.rai220.securityalarmbot.commands;

import com.pengrad.telegrambot.model.Message;
import com.rai220.securityalarmbot.BotService;
import com.rai220.securityalarmbot.R;
import com.rai220.securityalarmbot.photo.CameraTask;
import com.rai220.securityalarmbot.photo.ImageShot;
import com.rai220.securityalarmbot.prefs.Prefs;
import com.rai220.securityalarmbot.prefs.PrefsController;
import com.rai220.securityalarmbot.utils.FabricUtils;
import com.rai220.securityalarmbot.utils.L;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 *
 */
public class HDPhotoCommand extends AbstractCommand {

    private final ExecutorService es = Executors.newCachedThreadPool();

    public HDPhotoCommand(BotService service) {
        super(service);
    }

    @Override
    public String getCommand() {
        return "/hd_photo";
    }

    @Override
    public String getName() {
        return "HD Photo";
    }

    @Override
    public String getDescription() {
        return "Take a HD photo";
    }

    @Override
    public boolean isHide() {
        return true;
    }

    @Override
    public boolean execute(final Message message, Prefs prefs) {
        es.submit(new Runnable() {
            @Override
            public void run() {
                final Long chatId = message.chat().id();
                if (PrefsController.instance.isPro()) {
                    final int[] cameraIds = FabricUtils.getSelectedCameras();
                    for (int cameraId : cameraIds) {
                        boolean addTaskResult = botService.getCamera().addTask(new CameraTask(cameraId, 10000, 10000) {
                            @Override
                            public void processResult(ImageShot shot) {
                                if (shot != null) {
                                    byte[] jpeg = shot.toGoodQuality();
                                    telegramService.sendDocument(chatId, jpeg, "image.jpg");
                                    telegramService.notifyToOthers(message.from().id(), "took HD photo");
                                } else {
                                    telegramService.sendMessage(chatId, botService.getString(R.string.camera_init_error));
                                }
                            }
                        }, false);

                        if (!addTaskResult) {
                            telegramService.sendMessage(chatId, botService.getString(R.string.camera_busy));
                            L.e("Camera busy!");
                        }
                    }
                } else {
                    telegramService.sendMessage(chatId, botService.getString(R.string.only_pro));
                }
            }
        });
        return false;
    }
}