public void Import(IDocumentStore store, Miljovariabel miljovariabel, string rootName)
        {
            var codeV21Service = new Services.v21.CodeV21Service(_configuration);
            var naKode         = codeV21Service.GetByKode(null, rootName, _dbUrl);

            var rootNaturtype = new NaturTypeV22
            {
                DatabankId     = -1,
                Navn           = naKode.Navn,
                Kategori       = naKode.Kategori,
                Kode           = naKode.Kode.Id,
                ElementKode    = naKode.ElementKode,
                OverordnetKode = null
            };

            var naturTypes = new Dictionary <string, NaturTypeV22>
            {
                {
                    rootNaturtype.Kode,
                    rootNaturtype
                }
            };

            var children = new List <string>();

            using var bulk = store.BulkInsert(null, new BulkInsertOptions { OverwriteExisting = true });

            foreach (var code in naKode.UnderordnetKoder)
            {
                naKode = _codeV22Service.GetByKode(null, code.Id, _dbUrl);
                if (naKode == null)
                {
                    naKode = codeV21Service.GetByKode(null, code.Id, _dbUrl);
                    // add to current database
                    var missing = new NaturTypeV22
                    {
                        DatabankId     = -1,
                        Navn           = naKode.Navn,
                        Kategori       = naKode.Kategori,
                        Kode           = naKode.Kode.Id,
                        ElementKode    = naKode.ElementKode,
                        OverordnetKode = naKode.OverordnetKode.Id
                    };
                    bulk.Store(
                        RavenJObject.FromObject(missing),
                        RavenJObject.Parse("{'Raven-Entity-Name': 'Naturtypes'}"),
                        $"Naturtype/{missing.Kode.Replace(" ", "_")}"
                        );
                }
                var childNaturtype = new NaturTypeV22
                {
                    DatabankId     = -1,
                    Navn           = naKode.Navn,
                    Kategori       = naKode.Kategori,
                    Kode           = naKode.Kode.Id,
                    ElementKode    = naKode.ElementKode,
                    OverordnetKode = rootNaturtype.Kode
                };
                children.Add(childNaturtype.Kode);

                naturTypes.Add($"{childNaturtype.Kode}", childNaturtype);

                bulk.Store(
                    RavenJObject.FromObject(childNaturtype),
                    RavenJObject.Parse("{'Raven-Entity-Name': 'Naturtypes'}"),
                    $"Naturtype/{childNaturtype.Kode.Replace(" ", "_")}"
                    );
            }

            rootNaturtype.UnderordnetKoder = children.ToArray();

            bulk.Store(
                RavenJObject.FromObject(rootNaturtype),
                RavenJObject.Parse("{'Raven-Entity-Name': 'Naturtypes'}"),
                $"Naturtype/{rootNaturtype.Kode.Replace(" ", "_")}"
                );

            using var session = store.OpenSession();
            var indexes = GetIndexes(session.Advanced.DocumentStore).ToList();

            ProcessNaturtypeGrunntype(naturTypes, bulk, session, indexes);
            ProcessNinDefinisjonHovedtyper(naturTypes, bulk, session, indexes);

            FixChildrenAndParents(store, naturTypes);

            ProcessNaturtypeKartlegging(ref naturTypes, bulk, session, indexes, "2500");
            ProcessNaturtypeKartlegging(ref naturTypes, bulk, session, indexes, "5000");
            ProcessNaturtypeKartlegging(ref naturTypes, bulk, session, indexes, "10000");
            ProcessNaturtypeKartlegging(ref naturTypes, bulk, session, indexes, "20000");

            //FixChildrenAndParents(store, naturTypes);
            FixEnvironment(ref naturTypes, miljovariabel, bulk, session, indexes);
        }
        private void FixEnvironment(
            ref Dictionary <string, NaturTypeV22> naturTypes,
            Miljovariabel miljovariabel,
            BulkInsertOperation bulk,
            IDocumentSession session,
            IEnumerable <string> indexes)
        {
            var indexName = "_Naturtype_LKM_hovedtypetrinn";
            var index     = indexes.FirstOrDefault(x => x.StartsWith(indexName, StringComparison.OrdinalIgnoreCase));

            if (string.IsNullOrEmpty(index))
            {
                return;
            }

            Log2Console(index, true);

            var query = session.Query <HovedtypeTrinn>(index);

            using var enumerator = session.Advanced.Stream(query);
            while (enumerator.MoveNext())
            {
                var hovedtypeTrinn = enumerator.Current?.Document;

                if (hovedtypeTrinn == null)
                {
                    continue;
                }

                Log2Console($"docId: {hovedtypeTrinn.docId}");

                var parent = naturTypes.ContainsKey($"NA {hovedtypeTrinn.HT}")
                    ? naturTypes[$"NA {hovedtypeTrinn.HT}"]
                    : null;

                if (parent == null)
                {
                    continue;
                }

                var trinn = new TrinnV22
                {
                    Kode        = hovedtypeTrinn.Gradientkode,
                    Type        = "Miljøvariabel",
                    LKMKategori = hovedtypeTrinn.LkmKategori,
                    Navn        = miljovariabel.GetTitleByKode(hovedtypeTrinn.Gradientkode)
                };

                if (string.IsNullOrEmpty(trinn.Navn))
                {
                    continue;
                }

                var listSubTrinn = new List <SubTrinnV22>();
                for (var i = 1; i < 6; i++)
                {
                    var subTrinn = new SubTrinnV22();
                    switch (i)
                    {
                    case 1:
                        subTrinn.Kode       = hovedtypeTrinn.Trinn1;
                        subTrinn.Navn       = hovedtypeTrinn.Trinn1Navn;
                        subTrinn.Basistrinn = hovedtypeTrinn.Trinn1Csv;
                        break;

                    case 2:
                        subTrinn.Kode       = hovedtypeTrinn.Trinn2;
                        subTrinn.Navn       = hovedtypeTrinn.Trinn2Navn;
                        subTrinn.Basistrinn = hovedtypeTrinn.Trinn2Csv;
                        break;

                    case 3:
                        subTrinn.Kode       = hovedtypeTrinn.Trinn3;
                        subTrinn.Navn       = hovedtypeTrinn.Trinn3Navn;
                        subTrinn.Basistrinn = hovedtypeTrinn.Trinn3Csv;
                        break;

                    case 4:
                        subTrinn.Kode       = hovedtypeTrinn.Trinn4;
                        subTrinn.Navn       = hovedtypeTrinn.Trinn4Navn;
                        subTrinn.Basistrinn = hovedtypeTrinn.Trinn4Csv;
                        break;

                    case 5:
                        subTrinn.Kode       = hovedtypeTrinn.Trinn5;
                        subTrinn.Navn       = hovedtypeTrinn.Trinn5Navn;
                        subTrinn.Basistrinn = hovedtypeTrinn.Trinn5Csv;
                        break;
                    }
                    if (string.IsNullOrEmpty(subTrinn.Kode))
                    {
                        continue;
                    }
                    listSubTrinn.Add(subTrinn);
                }

                if (listSubTrinn.Count > 0)
                {
                    trinn.Trinn = listSubTrinn.ToArray();
                }

                if (parent.Trinn == null)
                {
                    parent.Trinn = new[] { trinn };
                }
                else if (parent.Trinn.Any(x => x.Kode.Equals(trinn.Kode, StringComparison.OrdinalIgnoreCase)))
                {
                    continue;
                }
                else
                {
                    var list = new List <TrinnV22>();
                    list.AddRange(parent.Trinn);
                    list.Add(trinn);
                    parent.Trinn = list.ToArray();
                }

                bulk.Store(
                    RavenJObject.FromObject(parent),
                    RavenJObject.Parse("{'Raven-Entity-Name': 'Naturtypes'}"),
                    $"Naturtype/{parent.Kode.Replace(" ", "_")}"
                    );
                Thread.Sleep(1);
            }
        }