using Analysis.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Analysis.Services
{
    public static class DataService
    {
        public static AnalysisModel PrepareDefaultAnalysisModel()
        {
            var model = new AnalysisModel();
            model.Sections = new List<SectionModel>();
            var internalVulnerabilityCriteria = new List<QuestionModel>();
            var answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Vesnice s počtem obyvatel do 1500.",
                Value = 1,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Město/městská část s počtem obyvatel od 1501 do 20000.",
                Value = 2,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Větší město s počtem obyva-tel nad 20000.",
                Value = 3,
                IsChosen = false
            });
            internalVulnerabilityCriteria.Add(new QuestionModel()
            {
                Question = "Lokalita objektu",
                Answers = answers,
                QuestionType = QuestionType.ISpatialAspects,
                LowestValue = 1
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "0 – 1000",
                Value = 1,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "1001 – 10000",
                Value = 2,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "10001 - ∞",
                Value = 3,
                IsChosen = false
            });
            internalVulnerabilityCriteria.Add(new QuestionModel()
            {
                Question = "Maximální počet lidí v objektu",
                Answers = answers,
                QuestionType = QuestionType.ISpatialAspects,
                LowestValue = 1
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "0 – 150",
                Value = 1,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "151 – 300",
                Value = 2,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "301 - ∞",
                Value = 3,
                IsChosen = false
            });
            internalVulnerabilityCriteria.Add(new QuestionModel()
            {
                Question = "Index kriminality",
                Answers = answers,
                QuestionType = QuestionType.ISpatialAspects,
                LowestValue = 1
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Uzavřené prostranství",
                Value = 1,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Částečně uzavřené prostranství",
                Value = 2,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Otevřené prostranství",
                Value = 3,
                IsChosen = false
            });
            internalVulnerabilityCriteria.Add(new QuestionModel()
            {
                Question = "Dostupnost objektu",
                Answers = answers,
                QuestionType = QuestionType.ISpatialAspects,
                LowestValue = 1
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Každá část objektu má vlastní primární možnost evakuace",
                Value = 1,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Hlavní části objektu mají vlastní primární možnost evakuace",
                Value = 2,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Jedna možnost evakuace pro celý objekt",
                Value = 3,
                IsChosen = false
            });
            internalVulnerabilityCriteria.Add(new QuestionModel()
            {
                Question = "Možnosti evakuace",
                Answers = answers,
                QuestionType = QuestionType.ISpatialAspects,
                LowestValue = 1
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Klidné – málo kriminální činnosti",
                Value = 1,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Neklidné – je zde nenásilná kriminální činnost",
                Value = 2,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Nebezpečné – násilná kriminální činnost",
                Value = 3,
                IsChosen = false
            });
            internalVulnerabilityCriteria.Add(new QuestionModel()
            {
                Question = "Okolí objektu",
                Answers = answers,
                QuestionType = QuestionType.ISpatialAspects,
                LowestValue = 1
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Běžná událost – pravidelně opakovaná událost",
                Value = 1,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Méně častá událost",
                Value = 2,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Ojedinělá událost – sportovní den",
                Value = 3,
                IsChosen = false
            });
            internalVulnerabilityCriteria.Add(new QuestionModel()
            {
                Question = "Atraktivita události v objektu",
                Answers = answers,
                QuestionType = QuestionType.ISpatialAspects,
                LowestValue = 1
            });

            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "0 - 90 min",
                Value = 1,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "91 min - 4h",
                Value = 2,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "> 4h 1m",
                Value = 3,
                IsChosen = true
            });
            internalVulnerabilityCriteria.Add(new QuestionModel()
            {
                Question = "Doba trvání události v objektu",
                Answers = answers,
                QuestionType = QuestionType.ITimeAspects,
                LowestValue = 1
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "0 - 5 min",
                Value = 1,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "5 - 10 min",
                Value = 2,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "> 10m",
                Value = 3,
                IsChosen = false
            });
            internalVulnerabilityCriteria.Add(new QuestionModel()
            {
                Question = "Doba evakuace",
                Answers = answers,
                QuestionType = QuestionType.ITimeAspects,
                LowestValue = 1
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "< 7 min",
                Value = 1,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "7 - 15 min",
                Value = 2,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "> 15m",
                Value = 3,
                IsChosen = true
            });
            internalVulnerabilityCriteria.Add(new QuestionModel()
            {
                Question = "Dojezd IZS",
                Answers = answers,
                QuestionType = QuestionType.ITimeAspects,
                LowestValue = 1
            });

            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "0 - 2000 osob",
                Value = 1,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "2001 - 5000 osob",
                Value = 2,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "> 5000",
                Value = 3,
                IsChosen = false
            });
            internalVulnerabilityCriteria.Add(new QuestionModel()
            {
                Question = "Kapacita chráněného prostoru",
                Answers = answers,
                QuestionType = QuestionType.IConcentrationPeople,
                LowestValue = 1
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "< 501 osob",
                Value = 1,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "501 - 1000 osob",
                Value = 2,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "> 1000 osob",
                Value = 3,
                IsChosen = false
            });
            internalVulnerabilityCriteria.Add(new QuestionModel()
            {
                Question = "Výskyt počtu osob v chráněném prostoru mimo událost",
                Answers = answers,
                QuestionType = QuestionType.IConcentrationPeople,
                LowestValue = 1
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "< 501 osob",
                Value = 1,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "501 - 1000 osob",
                Value = 2,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "> 1000 osob",
                Value = 3,
                IsChosen = false
            });
            internalVulnerabilityCriteria.Add(new QuestionModel()
            {
                Question = "Počet lidí v objektu během události",
                Answers = answers,
                QuestionType = QuestionType.IConcentrationPeople,
                LowestValue = 1
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Osoby zde jen prochází",
                Value = 1,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Osoby zde tráví méně než 10 minut během události",
                Value = 2,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Osoby zde tráví více než 10 minut během události",
                Value = 3,
                IsChosen = true
            });
            internalVulnerabilityCriteria.Add(new QuestionModel()
            {
                Question = "Typ chráněného prostoru z hlediska zdrženlivosti osob",
                Answers = answers,
                QuestionType = QuestionType.IConcentrationPeople,
                LowestValue = 1
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "< 3",
                Value = 1,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "3 - 9",
                Value = 2,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "> 9",
                Value = 3,
                IsChosen = true
            });
            internalVulnerabilityCriteria.Add(new QuestionModel()
            {
                Question = "Počet opakování události",
                Answers = answers,
                QuestionType = QuestionType.IConcentrationPeople,
                LowestValue = 1
            });

            model.Sections.Add(new SectionModel()
            {
                SectionType = SectionType.InternalVulnerabilityCriteria,
                Questions = internalVulnerabilityCriteria,
                ShowSection = true
            });


            var externalVulnerabilityCriteria = new List<QuestionModel>();
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Kino, divadlo, sportovní areál",
                Value = 1,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Školské zařízení, budova samosprávy",
                Value = 2,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Nemocnice, kostel, vládní budova",
                Value = 3,
                IsChosen = false
            });
            externalVulnerabilityCriteria.Add(new QuestionModel()
            {
                Question = "Atraktivita okolí objektu dle významu",
                Answers = answers,
                QuestionType = QuestionType.ESpatialAspects,
                LowestValue = 1
            });

            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Počet spáchaných činů na tento typ objektu < 5",
                Value = 1,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Počet spáchaných činů na tento typ objektu 5 - 10",
                Value = 2,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Počet spáchaných činů na tento typ objektu > 10",
                Value = 3,
                IsChosen = true
            });
            externalVulnerabilityCriteria.Add(new QuestionModel()
            {
                Question = "Atraktivita okolí objektu z pohledu historických událostí",
                Answers = answers,
                QuestionType = QuestionType.ESpatialAspects,
                LowestValue = 1
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "< 4",
                Value = 1,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "4 - 6",
                Value = 2,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "> 6",
                Value = 3,
                IsChosen = false
            });
            externalVulnerabilityCriteria.Add(new QuestionModel()
            {
                Question = "Počet přilehlých objektů společenského, vládního, náboženského významu",
                Answers = answers,
                QuestionType = QuestionType.ESpatialAspects,
                LowestValue = 1
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Parkoviště není v těsné blízkosti",
                Value = 1,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Parkoviště sousedí s objektem",
                Value = 2,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Parkoviště je součástí objektu",
                Value = 3,
                IsChosen = false
            });
            externalVulnerabilityCriteria.Add(new QuestionModel()
            {
                Question = "Přítomnost parkoviště",
                Answers = answers,
                QuestionType = QuestionType.ESpatialAspects,
                LowestValue = 1
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "K objektu nevede žádná příjezdová cesta",
                Value = 1,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "K objektu vede méně než 4 příjezdové cesty",
                Value = 2,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "K objektu vede 4 a více příjezdových cest",
                Value = 3,
                IsChosen = false
            });
            externalVulnerabilityCriteria.Add(new QuestionModel()
            {
                Question = "Příjezdová komunikace",
                Answers = answers,
                QuestionType = QuestionType.ESpatialAspects,
                LowestValue = 1
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "< 10",
                Value = 1,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "10 - 25",
                Value = 2,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "> 25",
                Value = 3,
                IsChosen = false
            });
            externalVulnerabilityCriteria.Add(new QuestionModel()
            {
                Question = "Počet obydlených objektů v okolí 100m",
                Answers = answers,
                QuestionType = QuestionType.ESpatialAspects,
                LowestValue = 1
            });

            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "8:01 – 14:00",
                Value = 1,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "14:01 – 18:00",
                Value = 2,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "18:01 – 8:00",
                Value = 3,
                IsChosen = false
            });
            externalVulnerabilityCriteria.Add(new QuestionModel()
            {
                Question = "Provoz objektů v okolí 200m",
                Answers = answers,
                QuestionType = QuestionType.ETimeAspects,
                LowestValue = 1
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Po - Pá",
                Value = 1,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Pátek a víkendy",
                Value = 2,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Celý týden",
                Value = 3,
                IsChosen = false
            });
            externalVulnerabilityCriteria.Add(new QuestionModel()
            {
                Question = "Otevření objektů v okolí",
                Answers = answers,
                QuestionType = QuestionType.ETimeAspects,
                LowestValue = 1
            });


            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "< 500",
                Value = 1,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "500 - 2000",
                Value = 2,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "> 2000",
                Value = 3,
                IsChosen = false
            });
            externalVulnerabilityCriteria.Add(new QuestionModel()
            {
                Question = "Počet osob v okolí areálu v den konání akce",
                Answers = answers,
                QuestionType = QuestionType.EConcentrationPeople,
                LowestValue = 1
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "< 500",
                Value = 1,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "500 - 1000",
                Value = 2,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "> 1000",
                Value = 3,
                IsChosen = false
            });
            externalVulnerabilityCriteria.Add(new QuestionModel()
            {
                Question = "Počet osob v okolí areálu v mimo udá-lost",
                Answers = answers,
                QuestionType = QuestionType.EConcentrationPeople,
                LowestValue = 1
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "< 1000",
                Value = 1,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "1000 - 5000",
                Value = 2,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "> 5000",
                Value = 3,
                IsChosen = false
            });
            externalVulnerabilityCriteria.Add(new QuestionModel()
            {
                Question = "Počet lidí v obydlených objektech",
                Answers = answers,
                QuestionType = QuestionType.EConcentrationPeople,
                LowestValue = 1
            });

            model.Sections.Add(new SectionModel()
            {
                SectionType = SectionType.ExternalVulnerabilityCriteria,
                Questions = externalVulnerabilityCriteria,
                ShowSection = true
            });

            var internalSecurityCriteria = new List<QuestionModel>();
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "< 3 metry",
                Value = 0,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "3 - 6 metrů",
                Value = 1,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "> 6 metrů",
                Value = 2,
                IsChosen = false
            });
            internalSecurityCriteria.Add(new QuestionModel()
            {
                Question = "Jak jsou široké vnitřní chodby? Aby v případě vzniku paniky nedošlo k zranění.",
                Answers = answers,
                QuestionType = QuestionType.IStructuralMechanicalAspects,
                LowestValue = 0
            });

            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Žádné prosklené plochy",
                Value = 0,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Vybrané prosklené plochy",
                Value = 1,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Všechny prosklené plochy",
                Value = 2,
                IsChosen = false
            });
            internalSecurityCriteria.Add(new QuestionModel()
            {
                Question = "Jsou prosklené plochy vybaveny bezpečnostními foliemi?",
                Answers = answers,
                QuestionType = QuestionType.IStructuralMechanicalAspects,
                LowestValue = 0
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Volné cesty",
                Value = 0,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Některé z cest jsou vybaveny MZS",
                Value = 1,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Všechny cesty jsou vybaveny MZS",
                Value = 2,
                IsChosen = false
            });
            internalSecurityCriteria.Add(new QuestionModel()
            {
                Question = "Jsou příjezdové cesty bráněny pomoci MZS?",
                Answers = answers,
                QuestionType = QuestionType.IStructuralMechanicalAspects,
                LowestValue = 0
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Minimální tloušťka 20 mm, překonání kolem 3 minut",
                Value = 0,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Tloušťka  do 40 mm, překonání kolem 5 minut",
                Value = 1,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Tloušťka nad 40 mm, překonání kolem 10 minut",
                Value = 2,
                IsChosen = false
            });
            internalSecurityCriteria.Add(new QuestionModel()
            {
                Question = "Obvodové dveře budovy",
                Answers = answers,
                QuestionType = QuestionType.IStructuralMechanicalAspects,
                LowestValue = 0
            });

            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Volně přístupné",
                Value = 0,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "S povolením, nebo při veřejné události",
                Value = 1,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Pouze v určitou dobu s povolením",
                Value = 2,
                IsChosen = false
            });
            internalSecurityCriteria.Add(new QuestionModel()
            {
                Question = "Přístup do školy",
                Answers = answers,
                QuestionType = QuestionType.ITechnologicalProcessAspects,
                LowestValue = 0
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Žádnou kamerou",
                Value = 0,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Kamerami",
                Value = 1,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Kombinací kamer a ostrahy",
                Value = 2,
                IsChosen = false
            });
            internalSecurityCriteria.Add(new QuestionModel()
            {
                Question = "Příjezdové cesty jsou monitorovány",
                Answers = answers,
                QuestionType = QuestionType.ITechnologicalProcessAspects,
                LowestValue = 0
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Žádné",
                Value = 0,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Tísňové tlačítka",
                Value = 1,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Soubor PZTS prvků (tísňové tlačítka, detektory)",
                Value = 2,
                IsChosen = true
            });
            internalSecurityCriteria.Add(new QuestionModel()
            {
                Question = "Jaké jsou použité prvky PZTS v objektu?",
                Answers = answers,
                QuestionType = QuestionType.ITechnologicalProcessAspects,
                LowestValue = 0
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Základní bez záznamů",
                Value = 0,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Základní se záznamem",
                Value = 1,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Pokročilý se záznamem, přísvitem a detekčními funkcionalitami",
                Value = 2,
                IsChosen = false
            });
            internalSecurityCriteria.Add(new QuestionModel()
            {
                Question = "Kamerový systém v objektu",
                Answers = answers,
                QuestionType = QuestionType.ITechnologicalProcessAspects,
                LowestValue = 0
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Nejsou kontrolovány",
                Value = 0,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Fyzická kontrola",
                Value = 1,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Kontrola za pomoci nástrojů k tomu určených (detektory, skenery)",
                Value = 2,
                IsChosen = false
            });
            internalSecurityCriteria.Add(new QuestionModel()
            {
                Question = "Kontrola osob při vstupu na veřejnou akci",
                Answers = answers,
                QuestionType = QuestionType.ITechnologicalProcessAspects,
                LowestValue = 0
            });

            model.Sections.Add(new SectionModel()
            {
                SectionType = SectionType.InternalSecurityCriteria,
                Questions = internalSecurityCriteria,
                ShowSection = true
            });

            var externalSecurityCriteria = new List<QuestionModel>();
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Příjezdové komunikace jsou zcela průjezdné",
                Value = 0,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Část příjezdových komunikací jsou neprůjezdné za použití MZS (např. sloupy, betonové bloky, atd.)",
                Value = 1,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Veškeré příjezdové komunikace jsou neprůjezdné za použití MZS (např. Sloupy, betonové bloky, atd.)",
                Value = 2,
                IsChosen = false
            });
            externalSecurityCriteria.Add(new QuestionModel()
            {
                Question = "MZS k zabránění vjezdu vozidel skrze příjezdové komunikace do vnějšího areálu objektu",
                Answers = answers,
                QuestionType = QuestionType.EStructuralMechanicalAspects,
                LowestValue = 0
            });

            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Ne, některé části pozemních či pěších komunikací jeví známky značného opotřebení",
                Value = 0,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Ano, alespoň polovina pozemní či pěší komunikace splňují zmíněnou podmínku a nejeví známky opotřebení",
                Value = 1,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Ano, veškerá pozemní či pěší komunikace splňuje zmíněnou podmínku a nejeví známky opotřebení",
                Value = 2,
                IsChosen = true
            });
            externalSecurityCriteria.Add(new QuestionModel()
            {
                Question = "Jsou pozemní a pěší komunikace udržovány v takovém stavu, aby v případě narušení bezpečnosti nedošlo k neočekávaným zraněním či ztrátě na životech?",
                Answers = answers,
                QuestionType = QuestionType.EStructuralMechanicalAspects,
                LowestValue = 0
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Žádné oplocení",
                Value = 0,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Část areálu tvoří oplocení",
                Value = 1,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Celý areál tvoří oplocení",
                Value = 2,
                IsChosen = false
            });
            externalSecurityCriteria.Add(new QuestionModel()
            {
                Question = "Perimetr areálu",
                Answers = answers,
                QuestionType = QuestionType.EStructuralMechanicalAspects,
                LowestValue = 0
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Žádné chráněné vjezdy",
                Value = 0,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "1 chráněný vjezd",
                Value = 1,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "2 a více chráněných vjezdů",
                Value = 2,
                IsChosen = false
            });
            externalSecurityCriteria.Add(new QuestionModel()
            {
                Question = "Počet chráněných vjezdů",
                Answers = answers,
                QuestionType = QuestionType.EStructuralMechanicalAspects,
                LowestValue = 0
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Žádné",
                Value = 0,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Část objektu",
                Value = 1,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Kolem celého objektu",
                Value = 2,
                IsChosen = false
            });
            externalSecurityCriteria.Add(new QuestionModel()
            {
                Question = "Osvětlení",
                Answers = answers,
                QuestionType = QuestionType.EStructuralMechanicalAspects,
                LowestValue = 0
            });

            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Ne",
                Value = 0,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Ano, vnější prostory jsou hlídány jednou či dvěma hlídkami policie",
                Value = 1,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Ano, vnější prostory jsou hlídány zvýšeným počtem hlídek policie ",
                Value = 2,
                IsChosen = false
            });
            externalSecurityCriteria.Add(new QuestionModel()
            {
                Question = "Jsou vnější prostory hlídány městskou či státní policií?",
                Answers = answers,
                QuestionType = QuestionType.ETechnologicalProcessAspects,
                LowestValue = 0
            });

            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Základní bez záznamů",
                Value = 0,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Základní se záznamem",
                Value = 1,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Pokročilý se záznamem, přísvitem a detekčními funkcionalitami",
                Value = 2,
                IsChosen = false
            });
            externalSecurityCriteria.Add(new QuestionModel()
            {
                Question = "Kamerový systém",
                Answers = answers,
                QuestionType = QuestionType.ETechnologicalProcessAspects,
                LowestValue = 0
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Ne",
                Value = 0,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Ano",
                Value = 1,
                IsChosen = true
            });
            externalSecurityCriteria.Add(new QuestionModel()
            {
                Question = "Jsou vnější prostory objektu monitorovány kamerovým systém celý den?",
                Answers = answers,
                QuestionType = QuestionType.ETechnologicalProcessAspects,
                LowestValue = 0
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Ne",
                Value = 0,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Ano",
                Value = 1,
                IsChosen = false
            });
            externalSecurityCriteria.Add(new QuestionModel()
            {
                Question = "Je hlídána parkovací plocha?",
                Answers = answers,
                QuestionType = QuestionType.ETechnologicalProcessAspects,
                LowestValue = 0
            });
            model.Sections.Add(new SectionModel()
            {
                SectionType = SectionType.ExternalSecurityCriteria,
                Questions = externalSecurityCriteria,
                ShowSection = true
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Ne",
                Value = 0,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Ano, více jak 50% areálu",
                Value = 1,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Ano, celý areál je monitorován",
                Value = 2,
                IsChosen = false
            });
            externalSecurityCriteria.Add(new QuestionModel()
            {
                Question = "Je vnější prostor areálu monitorován kamerovým systémem?",
                Answers = answers,
                QuestionType = QuestionType.ETechnologicalProcessAspects,
                LowestValue = 0
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Ne",
                Value = 0,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Ano",
                Value = 1,
                IsChosen = false
            });
            externalSecurityCriteria.Add(new QuestionModel()
            {
                Question = "Jsou vnější prostory hlídány bezpečnostní službou?",
                Answers = answers,
                QuestionType = QuestionType.ETechnologicalProcessAspects,
                LowestValue = 0
            });
            
            var organizationalSecurityAspects = new List<QuestionModel>();
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Zaměstnanci",
                Value = 0,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Kamerovým systémem",
                Value = 1,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Kamerovým systémem se záznamem a pracovníky",
                Value = 2,
                IsChosen = false
            });
            organizationalSecurityAspects.Add(new QuestionModel()
            {
                Question = "Monitorování osob vně areálu",
                Answers = answers,
                QuestionType = null,
                LowestValue = 0
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Požární plán",
                Value = 0,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Požární plán a označené východy",
                Value = 1,
                IsChosen = true
            });
            organizationalSecurityAspects.Add(new QuestionModel()
            {
                Question = "Označení požárních východů",
                Answers = answers,
                QuestionType = null,
                LowestValue = 0
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Evakuační plán",
                Value = 0,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Evakuační plán a označené východy",
                Value = 1,
                IsChosen = true
            });
            organizationalSecurityAspects.Add(new QuestionModel()
            {
                Question = "Označení evakuačních východů",
                Answers = answers,
                QuestionType = null,
                LowestValue = 0
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Do 12 h",
                Value = 0,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Do 16 h",
                Value = 1,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Nepřetržitá",
                Value = 2,
                IsChosen = false
            });
            organizationalSecurityAspects.Add(new QuestionModel()
            {
                Question = "Přítomnost bezpečnostní služby v areálu",
                Answers = answers,
                QuestionType = null,
                LowestValue = 0
            });
            model.Sections.Add(new SectionModel()
            {
                SectionType = SectionType.OrganizationalSecurityAspects,
                Questions = organizationalSecurityAspects,
                ShowSection = true
            });

            var regimeSecurityAspects = new List<QuestionModel>();
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Žádná kontrola vjezdu",
                Value = 0,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "V objektu je realizovaná kontrola vjezdu vozidel",
                Value = 1,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Zákaz vjezdu neoprávněných vozidel",
                Value = 2,
                IsChosen = false
            });
            regimeSecurityAspects.Add(new QuestionModel()
            {
                Question = "Režim kontroly vjezdu vozidel do areálu",
                Answers = answers,
                QuestionType = null,
                LowestValue = 0
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Vstup není nijak kontrolován a zabezpečen",
                Value = 0,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Vstup zabezpečen pomoci zámkového systému",
                Value = 1,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Vstup zabezpečen pomoci zámkového systému a ostrahou, která provádí obchůzky",
                Value = 2,
                IsChosen = false
            });
            regimeSecurityAspects.Add(new QuestionModel()
            {
                Question = "Režim kontroly vstupu do neveřejných míst",
                Answers = answers,
                QuestionType = null,
                LowestValue = 0
            });
            answers = new List<AnswerModel>();
            answers.Add(new AnswerModel()
            {
                Answer = "Ne, není chráněn ani monitorován",
                Value = 0,
                IsChosen = true
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Ano, je monitorován",
                Value = 1,
                IsChosen = false
            });
            answers.Add(new AnswerModel()
            {
                Answer = "Ano, je monitorován a je chráněn hlídkou policie",
                Value = 2,
                IsChosen = false
            });
            regimeSecurityAspects.Add(new QuestionModel()
            {
                Question = "Je objekt chráněn městskou či státní policií?",
                Answers = answers,
                QuestionType = null,
                LowestValue = 0
            });

            model.Sections.Add(new SectionModel()
            {
                SectionType = SectionType.RegimeSecurityAspects,
                Questions = regimeSecurityAspects,
                ShowSection = true
            });

            return model;
        }

        public static AnalysisModel ClearAnalysisModel()
        {
            var model = new AnalysisModel()
            {
                Sections = new List<SectionModel>()
            };
            var questions = new List<QuestionModel>();
            questions.Add(new QuestionModel()
            {
                Question = string.Empty,
                Answers = new List<AnswerModel>(),
                QuestionType = QuestionType.ISpatialAspects,
                Edit = true,
                LowestValue = 1
            });
            questions.Add(new QuestionModel()
            {
                Question = string.Empty,
                Answers = new List<AnswerModel>(),
                QuestionType = QuestionType.ITimeAspects,
                Edit = true,
                LowestValue = 1
            });
            questions.Add(new QuestionModel()
            {
                Question = string.Empty,
                Answers = new List<AnswerModel>(),
                QuestionType = QuestionType.IConcentrationPeople,
                Edit = true,
                LowestValue = 1
            });
            model.Sections.Add(new SectionModel()
            {
                SectionType = SectionType.InternalVulnerabilityCriteria,
                Questions = questions,
                ShowSection = true
            });

            questions = new List<QuestionModel>();
            questions.Add(new QuestionModel()
            {
                Question = string.Empty,
                Answers = new List<AnswerModel>(),
                QuestionType = QuestionType.ESpatialAspects,
                Edit = true,
                LowestValue = 1
            });
            questions.Add(new QuestionModel()
            {
                Question = string.Empty,
                Answers = new List<AnswerModel>(),
                QuestionType = QuestionType.ETimeAspects,
                Edit = true,
                LowestValue = 1
            });
            questions.Add(new QuestionModel()
            {
                Question = string.Empty,
                Answers = new List<AnswerModel>(),
                QuestionType = QuestionType.EConcentrationPeople,
                Edit = true,
                LowestValue = 1
            });
            model.Sections.Add(new SectionModel()
            {
                SectionType = SectionType.ExternalVulnerabilityCriteria,
                Questions = questions,
                ShowSection = true
            });

            questions = new List<QuestionModel>();
            questions.Add(new QuestionModel()
            {
                Question = string.Empty,
                Answers = new List<AnswerModel>(),
                QuestionType = QuestionType.IStructuralMechanicalAspects,
                Edit = true,
                LowestValue = 0
            });
            questions.Add(new QuestionModel()
            {
                Question = string.Empty,
                Answers = new List<AnswerModel>(),
                QuestionType = QuestionType.ITechnologicalProcessAspects,
                Edit = true,
                LowestValue = 0
            });
            model.Sections.Add(new SectionModel()
            {
                SectionType = SectionType.InternalSecurityCriteria,
                Questions = questions,
                ShowSection = true
            });

            questions = new List<QuestionModel>();
            questions.Add(new QuestionModel()
            {
                Question = string.Empty,
                Answers = new List<AnswerModel>(),
                QuestionType = QuestionType.EStructuralMechanicalAspects,
                Edit = true,
                LowestValue = 0
            });
            questions.Add(new QuestionModel()
            {
                Question = string.Empty,
                Answers = new List<AnswerModel>(),
                QuestionType = QuestionType.ETechnologicalProcessAspects,
                Edit = true,
                LowestValue = 0
            });
            model.Sections.Add(new SectionModel()
            {
                SectionType = SectionType.ExternalSecurityCriteria,
                Questions = questions,
                ShowSection = true
            });

            questions = new List<QuestionModel>();
            questions.Add(new QuestionModel()
            {
                Question = string.Empty,
                Answers = new List<AnswerModel>(),
                QuestionType = null,
                Edit = true,
                LowestValue = 0
            });
            model.Sections.Add(new SectionModel()
            {
                SectionType = SectionType.OrganizationalSecurityAspects,
                Questions = questions,
                ShowSection = true
            });

            questions = new List<QuestionModel>();
            questions.Add(new QuestionModel()
            {
                Question = string.Empty,
                Answers = new List<AnswerModel>(),
                QuestionType = null,
                Edit = true,
                LowestValue = 0
            });
            model.Sections.Add(new SectionModel()
            {
                SectionType = SectionType.RegimeSecurityAspects,
                Questions = questions,
                ShowSection = true
            });
            return model;
        }

        public static List<RatingTableModel> PrepareDefaultRatingTables()
        {
            var model = new List<RatingTableModel>();
            var modelRating = new RatingTableModel();
            modelRating.SectionType = SectionType.InternalVulnerabilityCriteria;
            var ratings = new List<RatingModel>();
            ratings.Add(new RatingModel()
            {
                MinValue = 0,
                MaxValue = 50,
                Name = "Nízká"
            });
            ratings.Add(new RatingModel()
            {
                MinValue = 50,
                MaxValue = 75,
                Name = "Střední"
            });
            ratings.Add(new RatingModel()
            {
                MinValue = 75,
                MaxValue = 100,
                Name = "Vysoká"
            });
            modelRating.Ratings = ratings;
            model.Add(modelRating);
            
            modelRating = new RatingTableModel();
            modelRating.SectionType = SectionType.ExternalVulnerabilityCriteria;
            ratings = new List<RatingModel>();
            ratings.Add(new RatingModel()
            {
                MinValue = 0,
                MaxValue = 50,
                Name = "Nízká"
            });
            ratings.Add(new RatingModel()
            {
                MinValue = 50,
                MaxValue = 75,
                Name = "Střední"
            });
            ratings.Add(new RatingModel()
            {
                MinValue = 75,
                MaxValue = 100,
                Name = "Vysoká"
            });
            modelRating.Ratings = ratings;
            model.Add(modelRating);

            modelRating = new RatingTableModel();
            modelRating.SectionType = SectionType.InternalSecurityCriteria;
            ratings = new List<RatingModel>();
            ratings.Add(new RatingModel()
            {
                MinValue = 0,
                MaxValue = 50,
                Name = "Nízká"
            });
            ratings.Add(new RatingModel()
            {
                MinValue = 50,
                MaxValue = 75,
                Name = "Střední"
            });
            ratings.Add(new RatingModel()
            {
                MinValue = 75,
                MaxValue = 100,
                Name = "Vysoká"
            });
            modelRating.Ratings = ratings;
            model.Add(modelRating);

            modelRating = new RatingTableModel();
            modelRating.SectionType = SectionType.ExternalSecurityCriteria;
            ratings = new List<RatingModel>();
            ratings.Add(new RatingModel()
            {
                MinValue = 0,
                MaxValue = 50,
                Name = "Nízká"
            });
            ratings.Add(new RatingModel()
            {
                MinValue = 50,
                MaxValue = 75,
                Name = "Střední"
            });
            ratings.Add(new RatingModel()
            {
                MinValue = 75,
                MaxValue = 100,
                Name = "Vysoká"
            });
            modelRating.Ratings = ratings;
            model.Add(modelRating);

            modelRating = new RatingTableModel();
            modelRating.SectionType = SectionType.OrganizationalSecurityAspects;
            ratings = new List<RatingModel>();
            ratings.Add(new RatingModel()
            {
                MinValue = 0,
                MaxValue = 50,
                Name = "Nízká"
            });
            ratings.Add(new RatingModel()
            {
                MinValue = 50,
                MaxValue = 75,
                Name = "Střední"
            });
            ratings.Add(new RatingModel()
            {
                MinValue = 75,
                MaxValue = 100,
                Name = "Vysoká"
            });
            modelRating.Ratings = ratings;
            model.Add(modelRating);

            modelRating = new RatingTableModel();
            modelRating.SectionType = SectionType.RegimeSecurityAspects;
            ratings = new List<RatingModel>();
            ratings.Add(new RatingModel()
            {
                MinValue = 0,
                MaxValue = 50,
                Name = "Nízká"
            });
            ratings.Add(new RatingModel()
            {
                MinValue = 50,
                MaxValue = 75,
                Name = "Střední"
            });
            ratings.Add(new RatingModel()
            {
                MinValue = 75,
                MaxValue = 100,
                Name = "Vysoká"
            });
            modelRating.Ratings = ratings;
            model.Add(modelRating);
            return model;
        }
    }
}
