<template lang="pug">
main.view--onboarding
    article(
        style='display: flex; flex-direction: column; align-items: center'
        v-if='incomplete'
    )
        .answers(v-for='(value, key) in answered')
            span(v-if='key == "name" && value && currentStep == 2') Hi {{ value }}!
            span(v-if='key == "email" && value && currentStep == 3') Thanks for the contact info, {{ answered.name }}!
            
        h3(v-if="currentStep == 1") Welcome to Siimee Onboarding! Let's get started!
        br
        .step(v-for='(step, i) in survey.steps')
            component(
                :aspect-questions='step.component == "Aspects" ? survey.aspectQuestions : null'
                :is='step.component'
                :question='step'
                @handle-submit='onSubmit'
                @update-answers='updateAnswers'
                v-if='step && currentStep == i'
            )
            
        footer
            p(v-if='currentStep != 0') You have completed: {{ currentStep - 1 }} / {{ survey.steps.length -2 }} survey steps
    
    article(v-else)
        SurveyCompleteView(:answers='answered' :surveySteps='survey.steps')
</template>

<script>
import { surveyFactory } from '@/utils'
import { allSteps } from '@/utils/lang'
import stepViews from '@/components/onboarding'
import SurveyCompleteView from './SurveyCompleteView.vue'

// import savesurveybyprfileid - call it on submit
// paginate to save every steps answers
export default {
    name: 'OnboardingView',
    components: {
        ...stepViews,
        SurveyCompleteView,
    },
    data: () => ({
        answered: {},
        aspectQuestions: [],
        currentStep: 0,
        survey: null,
        incomplete: true,
    }),
    async created() {
        this.survey = await surveyFactory.createSurvey(allSteps['usa'])
    },
    methods: {
        onSubmit() {
            console.log(JSON.stringify(this.answered))
            this.incomplete = null
        },
        goToStep(num) {
            this.currentStep = num
        },
        updateAnswers(payload) {
            // null payload is passed on splash page
            if (payload) {
                const k = payload.question.survey_stage
                this.answered[k] = payload.input

                // TODO: render message to user on why they cannot proceed
                if (!this.survey.validateAnswer(this.answered)) return 

                // once validated, don't log password in answered object
                this.answered[k] = k === 'password' ? undefined : payload.input 
                console.log(`Updated answers: ${JSON.stringify(this.answered)}`)
                if (k === 'aspects') return
            }
            if (this.currentStep > this.survey.steps.length) {
                this.onSubmit(this.answered)
            } else {
                this.goToStep(this.currentStep + 1)
            }
        },
    },
}
</script>

<style lang="sass">
.view--onboarding
    width: 100%
    max-width: 428px
    background-color: #fff
    color: #1F2024
    font-family: Century Gothic,CenturyGothic,AppleGothic,sans-serif
    margin: 0 auto

    article
        height: 100vh

    .answers
        text-align: center

    .w-button
            display: flex
            width: 315px
            height: 60px
            border-radius: 6
            background-color: #D5D5D5
            color: #1F2024
            margin: 11px auto
            font-weight: bold
            font-size: 16px
            text-transform: uppercase
            &.next-btn
                border-radius: 6px
                background-color: #5BA626
                color: #1F2024
                height: 50px
                width: 315px
                font-size: 18px
                padding: 7px

    .w-card
        background-color: #1F2024
        justify-content: center
        align-items: center
        width: 100%


        h3
            text-transform: uppercase
            text-align: center
            font-size: 28px
            font-weight: bold
            color: white
            margin-top: 88px

        p
            color: white
            font-size: 18px
            padding: 11px
            text-align: center
            margin: 22px auto
            font-weight: bold

        input
            display: flex
            width: 315px
            height: 60px
            padding: 11px
            border-radius: 6
            background-color: #D5D5D5
            color: #1F2024
            margin: 11px auto
            font-weight: bold
            font-size: 16px

            .w-select
                padding: 11px
                color: #1F2024

            .search-type
                color: #1F2024
                height: 50px

        &.question
            p
                font-size: 18px
                text-align: left
                margin: 7px auto
                font-weight: normal
            section
                p
                    margin: 0
                    font-weight: bold
                    text-transform: capitalize
    .w-radio__input

        &.primary
            background-color: #FFFFFF
            border: #BCC5D3 1px solid

    .w-card__content
        .w-button
            height: 50px
            background-color: #5BA626
</style>
