import React, {ReactNode, useEffect, useState} from 'react';
import StepActivationForm from "./StepActivationForm";
import {checkCreationLink, createDuaRequest} from "../../../../API/dua";
import {useNavigate, useSearchParams} from "react-router-dom";
import DuaActivateBanner from "../../../../assets/images/activate_dua_banner.svg";
import StepCompleted from "./StepCompleted";
import useLoading from "../../../../hooks/useLoading";
import {useEncodedParams} from "../../../../hooks/useEncodedParams";

type CreateDuaFormProps = {
    children?: ReactNode
}


const ActivationForm = ({children}: CreateDuaFormProps) => {

    const [formData, setFormData] = useState<any>({})
    const [selectOptions, setSelectOptions] = useState<any>(null)
    const [loading, setLoading] = useLoading(true)
    const [params] = useEncodedParams();
    const [step, setStep] = useState<'pending' | 'activation_form' | 'completed'>('pending')
    const sig = params.get("signature");
    const navigate = useNavigate()

    useEffect(() => {

        (async () => {

            try {

                const res2 = await checkCreationLink(sig as string)

                const formDataIn = res2.data.form_data
                const personalIsDem = formDataIn.personal_email.endsWith('.demokritos.gr')


                const newFormData = {
                        afm: formDataIn.afm,
                        personal_email: formDataIn.personal_email,
                        gender: formDataIn.gender,

                        firstname: formDataIn.firstname,
                        lastname: formDataIn.lastname,
                        father_name: formDataIn.father_name,
                        mother_name: formDataIn.mother_name,
                        firstname_en: formDataIn.firstname_en,
                        lastname_en: formDataIn.lastname_en,
                        father_name_en: formDataIn.father_name_en,
                        mother_name_en: formDataIn.mother_name_en,

                        amka: formDataIn.amka,

                        work_relation_id: formDataIn.work_relation_id,
                        education_category_id: formDataIn.education_category_id,
                        staff_category_id: 0,
                        unit_id: formDataIn.unit_id || 0,
                        unit_category_id: formDataIn.unit_category_id ?? 0,

                        department_id: formDataIn.unit_category_id === 1 ? formDataIn.department_id : null,
                        research_group_id: formDataIn.unit_category_id === 2 ? formDataIn.research_group_id : null,

                        project_code: formDataIn.project_code,
                        contract_start_date: formDataIn.contract_start_date,
                        contract_end_date: formDataIn.contract_end_date,
                        collaboration_type: formDataIn.collaboration_type,
                        contract_type: formDataIn.contract_type,

                        building_id: formDataIn.building_id,

                        type: personalIsDem ? 'confirmation' : formDataIn.type,
                        status: formDataIn.status,

                        mobile_phone: formDataIn.mobile_phone ?? "",
                        office_phone: formDataIn.office_phone,
                        skype: formDataIn.skype,
                        website: formDataIn.website,
                        username: (formDataIn.type === 'confirmation' || personalIsDem) ? null : '',
                        demokritos_email: formDataIn.type === 'confirmation' ? formDataIn.username : (personalIsDem ? formDataIn.personal_email : null),
                        scientific_supervisor_code: formDataIn.scientific_supervisor_code,
                        scientific_supervisor_fullname: formDataIn.scientific_supervisor_fullname,
                        partner: formDataIn.partner,

                        office: formDataIn.office,

                        user_code: formDataIn.user_code,
                        hasEmail: (formDataIn.type === 'confirmation' || personalIsDem) ? 1 : 0,

                    informed:formDataIn.informed ?? false
                    }

                setFormData(newFormData)
                setSelectOptions(res2.data.select_options)
                setStep('activation_form')

            } catch (e: any) {
                if (e.response.status === 410) {
                    setStep('completed')
                    setFormData({"personal_email" : e.response.data.personal_email})
                } else {
                    navigate('not_found')
                }
            }
        })();

    }, [])


    /**  creation form step handler  */
    const handleCreationFormSubmit = async (formData: any) => {

        try {
            setLoading(true)
            const res = await createDuaRequest(formData)
            setStep('completed')
        } catch (e: any) {

        } finally {
            setLoading(false)
        }


    }

    return (
        <div id={'createdua'}>
            <div className="main-content">
                {
                    step === 'activation_form' && <StepActivationForm
                        formData={formData}
                        setFormData={setFormData}
                        selectOptions={selectOptions}
                        onSubmit={handleCreationFormSubmit}
                    ></StepActivationForm>
                }

                {
                    step === 'completed' &&
                    <StepCompleted
                        email={formData.personal_email}
                    />
                }
            </div>
            <div className="banner">
                <div className="inner">

                </div>
                {/*<img src={Group} alt="ldapreq"/>*/}
            </div>
            {/*<div className="banner">*/}
            {/*    <img src={DuaActivateBanner} alt="DuaActivateBanner"/>*/}
            {/*</div>*/}
        </div>
        // <div>yes</div>


    );
}

export default ActivationForm;
