import { expect } from "chai";

import { Html5QrcodeScanType } from "../../../src/core";
import { ScanTypeSelector } from "../../../src/ui/scanner/scan-type-selector"

describe("getDefaultScanType()", () => {
    it ("Camera + File returns camera", () => {
        let selector = new ScanTypeSelector([
            Html5QrcodeScanType.SCAN_TYPE_CAMERA,
            Html5QrcodeScanType.SCAN_TYPE_FILE]);
        expect(selector.getDefaultScanType()).to.equal(
            Html5QrcodeScanType.SCAN_TYPE_CAMERA);
    });

    it ("File + Camera returns camera", () => {
        let selector = new ScanTypeSelector([
            Html5QrcodeScanType.SCAN_TYPE_FILE,
            Html5QrcodeScanType.SCAN_TYPE_CAMERA]);
        expect(selector.getDefaultScanType()).to.equal(
            Html5QrcodeScanType.SCAN_TYPE_FILE);
    });

    it ("Camera returns camera", () => {
        let selector = new ScanTypeSelector([
            Html5QrcodeScanType.SCAN_TYPE_CAMERA]);
        expect(selector.getDefaultScanType()).to.equal(
            Html5QrcodeScanType.SCAN_TYPE_CAMERA);
    });

    it ("File returns camera", () => {
        let selector = new ScanTypeSelector([
            Html5QrcodeScanType.SCAN_TYPE_FILE]);
        expect(selector.getDefaultScanType()).to.equal(
            Html5QrcodeScanType.SCAN_TYPE_FILE);
    });
});

describe("hasMoreThanOneScanType()", () => {
    it ("Both values set - returns true", () => {
        let selector = new ScanTypeSelector([
            Html5QrcodeScanType.SCAN_TYPE_CAMERA,
            Html5QrcodeScanType.SCAN_TYPE_FILE]);
        expect(selector.hasMoreThanOneScanType()).to.be.true;

        selector = new ScanTypeSelector([
            Html5QrcodeScanType.SCAN_TYPE_FILE,
            Html5QrcodeScanType.SCAN_TYPE_CAMERA]);
        expect(selector.hasMoreThanOneScanType()).to.be.true;
    });

    it ("Single value set - returns true", () => {
        let selector = new ScanTypeSelector([
            Html5QrcodeScanType.SCAN_TYPE_CAMERA]);
        expect(selector.hasMoreThanOneScanType()).to.be.false;

        selector = new ScanTypeSelector([
            Html5QrcodeScanType.SCAN_TYPE_FILE]);
        expect(selector.hasMoreThanOneScanType()).to.be.false;
    });
});

describe("isCameraScanRequired()", () => {
    it ("Both values set - returns true", () => {
        let selector = new ScanTypeSelector([
            Html5QrcodeScanType.SCAN_TYPE_CAMERA,
            Html5QrcodeScanType.SCAN_TYPE_FILE]);
        expect(selector.isCameraScanRequired()).to.be.true;

        selector = new ScanTypeSelector([
            Html5QrcodeScanType.SCAN_TYPE_FILE,
            Html5QrcodeScanType.SCAN_TYPE_CAMERA]);
        expect(selector.isCameraScanRequired()).to.be.true;
    });

    it ("Camera only set - returns true", () => {
        let selector = new ScanTypeSelector([
            Html5QrcodeScanType.SCAN_TYPE_CAMERA]);
        expect(selector.isCameraScanRequired()).to.be.true;
    });

    it ("File only set - returns false", () => {
        let selector = new ScanTypeSelector([
            Html5QrcodeScanType.SCAN_TYPE_FILE]);
        expect(selector.isCameraScanRequired()).to.be.false;
    });
});

describe("isCameraScanType()", () => {
    it ("Camera passed - returns true", () => {
        expect(ScanTypeSelector.isCameraScanType(
            Html5QrcodeScanType.SCAN_TYPE_CAMERA)).to.be.true;
    });

    it ("File passed - returns false", () => {
        expect(ScanTypeSelector.isCameraScanType(
            Html5QrcodeScanType.SCAN_TYPE_FILE)).to.be.false;
    });
});

describe("isFileScanType()", () => {
    it ("Camera passed - returns false", () => {
        expect(ScanTypeSelector.isFileScanType(
            Html5QrcodeScanType.SCAN_TYPE_CAMERA)).to.be.false;
    });

    it ("File passed - returns true", () => {
        expect(ScanTypeSelector.isFileScanType(
            Html5QrcodeScanType.SCAN_TYPE_FILE)).to.be.true;
    });
});
