<template>
    <div id="regex-create">
        <div class="regex-header">
            <h1 v-if=" ! regex"> New regex searcher </h1>

            <div class="p-d-flex p-jc-center">
                <div class="p-formgroup-inline">
                    <div class="p-field" v-if=" ! regex">
                        <span class="p-float-label">
                            <InputText v-model="name"
                                    type="text"
                                    class="p-inputtext-sm"
                                    name="name"
                                    id="name">
                            </InputText>
                            <label for="name">Enter searcher name</label>
                        </span>
                    </div>

                    <Button @click="onSave"
                            :disabled="( ! name && ! regex) || ! pattern"
                            class="p-button-sm p-button-raised">
                        Save
                    </Button>
                </div>
            </div>
        </div>

        <div class="regex-box">
            <div class="main">
                <pattern-box v-model="pattern"></pattern-box>

                <text-box :pattern="pattern"
                          :flags="flags">
                </text-box>

                <flags v-model="flags"></flags>
            </div>

            <aside>
                <side-bar></side-bar>
            </aside>
        </div>
    </div>
</template>

<script lang="ts">
import {Component, Prop, Vue} from "vue-property-decorator";
import TextBox from './TextBox.vue';
import PatternBox from './PatternBox.vue';
import Flags from './Flags.vue';
import SideBar from './SideBar.vue';
import { eventBus } from "@/app";

@Component({
    name: 'RegexCreate',

    components: {
        TextBox,
        PatternBox,
        Flags,
        SideBar,
    },
})

export default class Create extends Vue {
    private name: string = '';
    private pattern: string = '';
    private flags: Array<string> = ['g', 'i'];

    @Prop({
        default: '',
    })
    public readonly regex!: string;

    onSave() {
        if ( ! this.regex) {
            this.save();

            return;
        }

        this.$emit('updated', this.pattern);
    }

    async save() {
        try {
            const { data } = await (window as any).axios.post('/regex', {
                name: this.name,
                expression: this.pattern,
            });

            this.$toast.add({
                severity: 'success',
                summary: 'Searcher created.',
                life: 1000,
            });

            setTimeout(() => {
                window.location.href = `/searchers/${data.searcher.id}`;
            }, 1000);
        } catch (e) {
            console.log(e);
            console.log('Something went wrong.');
        }
    }

    public async changeRoute(url: string) {
        if (this.pattern !== '' && this.pattern !== undefined) {
            if (this.name === '' || this.name === undefined) {
                this.name = 'Unnamed regex - ' + Date.now();
            }

            await this.save();
        }

        window.location.href = url;
    }

    created() {
        if (this.regex) {
            this.pattern = this.regex;
        }

        eventBus.$on('changeRoute', this.changeRoute);
    }
};
</script>

<style lang="scss" scoped>
#regex-create {
    margin-top: 25px;
}
</style>
