import {LayerDefinition} from "../LayerDefinition";
import {And, Or, Tag} from "../../Logic/TagsFilter";
import FixedText from "../Questions/FixedText";
import {ImageCarouselWithUploadConstructor} from "../../UI/Image/ImageCarouselWithUpload";
import {TagRenderingOptions} from "../TagRenderingOptions";

export class Birdhide extends LayerDefinition {

    private static readonly birdhide = new Tag("leisure", "bird_hide");


    constructor() {
        super("birdhide",{
            name: "vogelkijkplaats",
            description: "Een plaats om vogels te kijken, zoals een vogelkijkhut of kijkwand",
            overpassFilter: Birdhide.birdhide,
            elementsToShow: [],
            icon: "assets/nature/birdhide.svg",
            minzoom: 12,
            wayHandling: LayerDefinition.WAYHANDLING_CENTER_AND_WAY,
            presets: [
                {
                    title: "Vogelkijkplaats",
                    tags: [Birdhide.birdhide]
                }
            ],
            style(tags: any): { color: string; icon: any } {
                return {color: "", icon: undefined};
            },
        });

        function rmStart(toRemove: string, title: string): string {
            if (title.toLowerCase().indexOf(toRemove.toLowerCase()) == 0) {
                return title.substr(toRemove.length).trim();
            }
            return title;

        }

        function rmStarts(toRemove: string[], title: string) {
            for (const toRm of toRemove) {
                title = rmStart(toRm, title);
            }
            return title;
        }

        this.title = new TagRenderingOptions({
            tagsPreprocessor: (tags) => {
                if (tags.name) {
                    const nm =
                        rmStarts(
                            ["Vogelkijkhut", "Vogelkijkwand", "Kijkwand", "Kijkhut"],
                            tags.name);

                    tags.name = " '" + nm + "'";
                } else {
                    tags.name = "";
                }
            },
            mappings: [
                {
                    k: new And([new Tag("shelter", "no"), new Tag("building", "")]),
                    txt: "Vogelkijkwand{name}"
                },
                {
                    k: new And([new Tag("amenity", "shelter"), new Tag("building", "yes")]),
                    txt: "Vogelijkhut{name}"
                },
                {
                    k: new Tag("amenity", "shelter"),
                    txt: "Vogelijkhut{name}"
                },
                {
                    k: new Tag("shelter", "yes"),
                    txt: "Vogelijkhut{name}"
                },
                {
                    k: new Tag("amenity", "shelter"),
                    txt: "Vogelijkhut{name}"
                },
                {
                    k: new Tag("building", "yes"),
                    txt: "Vogelijkhut{name}"
                },
                {k: null, txt: "Vogelkijkplaats{name}"}
            ]
        });


        this.style = (properties) => {
            let icon = "assets/nature/birdhide.svg";
            if (new Or([new Tag("amenity", "shelter"), new Tag("building", "yes"), new Tag("shelter", "yes")]).matchesProperties(properties)) {
                icon = "assets/nature/birdshelter.svg";
            }

            return {
                color: "#0000bb",
                icon: {
                    iconUrl: icon,
                    iconSize: [40,40],
                    iconAnchor: [20,20]
                }
            }
        }


        this.elementsToShow = [
            new ImageCarouselWithUploadConstructor(),

            new TagRenderingOptions({
                question: "Is dit een kijkwand of kijkhut?",
                mappings: [
                    {
                        k: new And([new Tag("shelter", "no"), new Tag("building", ""), new Tag("amenity", "")]),
                        txt: "Vogelkijkwand"
                    },
                    {
                        k: new And([new Tag("amenity", "shelter"), new Tag("building", "yes"), new Tag("shelter", "yes")]),
                        txt: "Vogelijkhut"
                    },
                    {
                        k: new Or([new Tag("amenity", "shelter"), new Tag("building", "yes"), new Tag("shelter", "yes")]),
                        txt: "Vogelijkhut"
                    },
                 
                ]
            }),
            new TagRenderingOptions({
                question: "Is ze rolstoeltoegankelijk?",
                mappings: [
                    {
                        k: new Tag("wheelchair", "no"),
                        txt: "Niet rolstoeltoegankelijk"
                    },
                    {
                        k: new Tag("wheelchair", "limited"),
                        txt: "Een rolstoel raakt er, maar het is niet makkelijk"
                    },
                    {
                        k: new Tag("wheelchair", "yes"),
                        txt: "Een rolstoel raakt er gemakkelijk"
                    }
                ]
            }),

            new TagRenderingOptions({
                question: "Wie beheert deze?",
                freeform: {
                    key: "operator",
                    template: "Beheer door $$$",
                    renderTemplate: "Beheer door {operator}",
                    placeholder: "organisatie"
                },
                mappings: [
                    {k: new Tag("operator", "Natuurpunt"), txt: "Natuurpunt"},
                    {k: new Tag("operator", "Agentschap Natuur en Bos"), txt: "het Agentschap Natuur en Bos (ANB)"},

                ]
            })


        ];

    }
}