/*
 * Copyright 2015 Open Networking Laboratory
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */

package org.onosproject.cord.gui;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Before;
import org.junit.Test;
import org.onosproject.cord.gui.model.BundleFactory;
import org.onosproject.cord.gui.model.SubscriberUser;

import java.io.IOException;
import java.util.List;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

/**
 * Unit tests for {@link CordModelCache}.
 */
public class CoreModelCacheTest {

    private CordModelCache cache;

    @Before
    public void setUp() {
        cache = new CordModelCache();
    }

    @Test
    public void basic() {
        assertEquals("wrong bundle", BundleFactory.BASIC_BUNDLE,
                     cache.getCurrentBundle().descriptor());
    }

    @Test
    public void basicBundleJson() {
        String json = BundleFactory.toJson(cache.getCurrentBundle());
        System.out.println(json);
        assertTrue("bad basic json", sameJson(BASIC_BUNDLE_JSON, json));
    }

    @Test
    public void chooseFamilyBundle() {
        cache.setCurrentBundle("family");
        assertEquals("wrong bundle", BundleFactory.FAMILY_BUNDLE,
                     cache.getCurrentBundle().descriptor());
    }

    @Test
    public void familyBundleJson() {
        cache.setCurrentBundle("family");
        String json = BundleFactory.toJson(cache.getCurrentBundle());
        System.out.println(json);
        assertTrue("bad family json", sameJson(FAMILY_BUNDLE_JSON, json));
    }

    @Test
    public void checkUsers() {
        List<SubscriberUser> users = cache.getUsers();
        assertEquals("wrong # users", 4, users.size());
    }

    @Test
    public void usersBasicJson() {
        String json = cache.jsonUsers();
        System.out.println(json);
        assertTrue("bad users basic json", sameJson(USERS_BASIC, json));
    }

    @Test
    public void usersFamilyJson() {
        cache.setCurrentBundle("family");
        String json = cache.jsonUsers();
        System.out.println(json);
        assertTrue("bad users family json", sameJson(USERS_FAMILY, json));
    }

    @Test
    public void setNewLevel() {
        cache.setCurrentBundle("family");
        JsonNode node = fromString(cache.jsonUsers());
        assertEquals("wrong level", "G", getMomsLevel(node));

        cache.applyPerUserParam("1", "url_filter", "level", "R");

        node = fromString(cache.jsonUsers());
        assertEquals("wrong level", "R", getMomsLevel(node));
    }

    private String getMomsLevel(JsonNode node) {
        JsonNode mom = node.get("users").elements().next();
        assertEquals("wrong ID", 1, mom.get("id").asInt());
        return mom.get("profile").get("url_filter").get("level").asText();
    }


    // =============

    private JsonNode fromString(String s) {
        try {
            return MAPPER.readTree(s);
        } catch (IOException e) {
            System.out.println("Exception: " + e);
        }
        return null;
    }

    private boolean sameJson(String s1, String s2) {
        try {
            JsonNode tree1 = MAPPER.readTree(s1);
            JsonNode tree2 = MAPPER.readTree(s2);
            return tree1.equals(tree2);
        } catch (IOException e) {
            System.out.println("Exception: " + e);
        }
        return false;
    }

    private static final ObjectMapper MAPPER = new ObjectMapper();

    private static final String BASIC_BUNDLE_JSON = "{\n" +
            "    \"bundle\": {\n" +
            "        \"id\": \"basic\",\n" +
            "        \"name\": \"Basic Bundle\",\n" +
            "        \"desc\": \"Provides basic internet and firewall functions.\",\n" +
            "        \"functions\": [\n" +
            "            {\n" +
            "                \"id\": \"internet\",\n" +
            "                \"name\": \"Internet\",\n" +
            "                \"desc\": \"Basic internet connectivity.\",\n" +
            "                \"params\": {}\n" +
            "            },\n" +
            "            {\n" +
            "                \"id\": \"firewall\",\n" +
            "                \"name\": \"Firewall\",\n" +
            "                \"desc\": \"Normal firewall protection.\",\n" +
            "                \"params\": {}\n" +
            "            }\n" +
            "        ]\n" +
            "    },\n" +
            "    \"bundles\": [\n" +
            "        {\n" +
            "            \"id\": \"basic\",\n" +
            "            \"name\": \"Basic Bundle\",\n" +
            "            \"desc\": \"Provides basic internet and firewall functions.\"\n" +
            "        },\n" +
            "        {\n" +
            "            \"id\": \"family\",\n" +
            "            \"name\": \"Family Bundle\",\n" +
            "            \"desc\": \"Provides internet, firewall and parental control functions.\"\n" +
            "        }\n" +
            "    ]\n" +
            "}\n";

    private static final String FAMILY_BUNDLE_JSON = "{\n" +
            "    \"bundle\": {\n" +
            "        \"id\": \"family\",\n" +
            "        \"name\": \"Family Bundle\",\n" +
            "        \"desc\": \"Provides internet, firewall and parental control functions.\",\n" +
            "        \"functions\": [\n" +
            "            {\n" +
            "                \"id\": \"internet\",\n" +
            "                \"name\": \"Internet\",\n" +
            "                \"desc\": \"Basic internet connectivity.\",\n" +
            "                \"params\": {}\n" +
            "            },\n" +
            "            {\n" +
            "                \"id\": \"firewall\",\n" +
            "                \"name\": \"Firewall\",\n" +
            "                \"desc\": \"Normal firewall protection.\",\n" +
            "                \"params\": {}\n" +
            "            },\n" +
            "            {\n" +
            "                \"id\": \"url_filter\",\n" +
            "                \"name\": \"Parental Control\",\n" +
            "                \"desc\": \"Variable levels of URL filtering.\",\n" +
            "                \"params\": {\n" +
            "                    \"level\": \"G\",\n" +
            "                    \"levels\": [\n" +
            "                        \"OFF\",\n" +
            "                        \"G\",\n" +
            "                        \"PG\",\n" +
            "                        \"PG_13\",\n" +
            "                        \"R\",\n" +
            "                        \"NONE\"\n" +
            "                    ]\n" +
            "                }\n" +
            "            }\n" +
            "        ]\n" +
            "    },\n" +
            "    \"bundles\": [\n" +
            "        {\n" +
            "            \"id\": \"basic\",\n" +
            "            \"name\": \"Basic Bundle\",\n" +
            "            \"desc\": \"Provides basic internet and firewall functions.\"\n" +
            "        },\n" +
            "        {\n" +
            "            \"id\": \"family\",\n" +
            "            \"name\": \"Family Bundle\",\n" +
            "            \"desc\": \"Provides internet, firewall and parental control functions.\"\n" +
            "        }\n" +
            "    ]\n" +
            "}\n";

    private static final String USERS_BASIC = "{\n" +
            "  \"users\": [\n" +
            "    {\n" +
            "      \"id\": 1,\n" +
            "      \"name\": \"Mom's MacBook\",\n" +
            "      \"mac\": \"010203040506\",\n" +
            "      \"profile\": { }\n" +
            "    },\n" +
            "    {\n" +
            "      \"id\": 2,\n" +
            "      \"name\": \"Dad's iPad\",\n" +
            "      \"mac\": \"010203040507\",\n" +
            "      \"profile\": { }\n" +
            "    },\n" +
            "    {\n" +
            "      \"id\": 3,\n" +
            "      \"name\": \"Dick's laptop\",\n" +
            "      \"mac\": \"010203040508\",\n" +
            "      \"profile\": { }\n" +
            "    },\n" +
            "    {\n" +
            "      \"id\": 4,\n" +
            "      \"name\": \"Jane's laptop\",\n" +
            "      \"mac\": \"010203040509\",\n" +
            "      \"profile\": { }\n" +
            "    }\n" +
            "  ]\n" +
            "}\n";

    private static final String USERS_FAMILY = "{\n" +
            "  \"users\": [\n" +
            "    {\n" +
            "      \"id\": 1,\n" +
            "      \"name\": \"Mom's MacBook\",\n" +
            "      \"mac\": \"010203040506\",\n" +
            "      \"profile\": {\n" +
            "        \"url_filter\": {\n" +
            "          \"level\": \"G\"\n" +
            "        }\n" +
            "      }\n" +
            "    },\n" +
            "    {\n" +
            "      \"id\": 2,\n" +
            "      \"name\": \"Dad's iPad\",\n" +
            "      \"mac\": \"010203040507\",\n" +
            "      \"profile\": {\n" +
            "        \"url_filter\": {\n" +
            "          \"level\": \"G\"\n" +
            "        }\n" +
            "      }\n" +
            "    },\n" +
            "    {\n" +
            "      \"id\": 3,\n" +
            "      \"name\": \"Dick's laptop\",\n" +
            "      \"mac\": \"010203040508\",\n" +
            "      \"profile\": {\n" +
            "        \"url_filter\": {\n" +
            "          \"level\": \"G\"\n" +
            "        }\n" +
            "      }\n" +
            "    },\n" +
            "    {\n" +
            "      \"id\": 4,\n" +
            "      \"name\": \"Jane's laptop\",\n" +
            "      \"mac\": \"010203040509\",\n" +
            "      \"profile\": {\n" +
            "        \"url_filter\": {\n" +
            "          \"level\": \"G\"\n" +
            "        }\n" +
            "      }\n" +
            "    }\n" +
            "  ]\n" +
            "}\n";
}
