/*************
 ** IMPORTS **
 ************/
import './assets/styles/app.scss'
import {library} from '@fortawesome/fontawesome-svg-core'
import {faFacebook, faInstagram} from "@fortawesome/free-brands-svg-icons";
import 'bootstrap/dist/js/bootstrap.min.js'

import {faClipboard, faStar as faStarOutline} from "@fortawesome/free-regular-svg-icons";
import {
    faAnchor,
    faArrowDown,
    faArrowLeft,
    faArrowRight,
    faArrowRotateRight,
    faArrowsSpin,
    faArrowTurnUp,
    faArrowUp,
    faAward,
    faBan,
    faBars,
    faBolt,
    faBook,
    faBookOpen,
    faBorderAll,
    faBoxArchive,
    faBrain,
    faCalendarAlt,
    faCalendarDay,
    faCalendarPlus,
    faCalendarXmark,
    faCertificate,
    faChartLine,
    faChartPie,
    faCheck,
    faChevronDown,
    faChevronLeft,
    faChevronRight,
    faChevronUp,
    faCircle,
    faCircleArrowLeft,
    faCircleArrowUp,
    faCircleCheck,
    faCircleExclamation,
    faCircleNotch,
    faCirclePause,
    faCirclePlay,
    faCircleQuestion,
    faCircleXmark,
    faClock,
    faClockRotateLeft,
    faClone,
    faComment,
    faDice,
    faDumbbell,
    faEnvelope,
    faExpand,
    faExternalLinkAlt,
    faEye,
    faEyeSlash,
    faFaceFrown,
    faFaceGrinStars,
    faFaceMeh,
    faFaceSmile,
    faFaceSmileBeam,
    faFileAlt,
    faFileCircleQuestion,
    faFileLines,
    faFileMedical,
    faFilm,
    faFilter,
    faFlag,
    faFolder,
    faGauge,
    faGear,
    faGraduationCap,
    faGrimace,
    faHandshake,
    faHashtag,
    faHeart,
    faHistory,
    faHourglassEnd,
    faHourglassHalf,
    faImage,
    faInfo,
    faInfoCircle,
    faKey,
    faLayerGroup,
    faLightbulb,
    faListCheck,
    faLocationDot,
    faLock,
    faMagnifyingGlass,
    faMaskFace,
    faMedal,
    faMinus,
    faMusic,
    faPaperclip,
    faPaperPlane,
    faPen,
    faPersonCirclePlus,
    faPlay,
    faPlus,
    faPlusCircle,
    faQuestion,
    faQuoteLeft,
    faRandom,
    faRepeat,
    faRightFromBracket,
    faRightToBracket,
    faRocket,
    faRotate,
    faRotateRight,
    faSave,
    faScaleBalanced,
    faScroll,
    faShareNodes,
    faShoppingCart,
    faSignature,
    faSliders,
    faSpinner,
    faStar,
    faStethoscope,
    faStop,
    faSync,
    faTag,
    faTags,
    faThumbsDown,
    faThumbsUp,
    faTimes,
    faTrash,
    faTriangleExclamation,
    faTrophy,
    faUniversity,
    faUnlockAlt,
    faUser,
    faUserCircle,
    faUsersLine,
    faUserTag,
    faWallet,
    faWandMagicSparkles,
    faWrench,
    faXmark,
} from '@fortawesome/free-solid-svg-icons';
import {FontAwesomeIcon} from '@fortawesome/vue-fontawesome'
import {VueQueryPlugin} from "@tanstack/vue-query";
import {createPinia} from "pinia";
import {createApp} from 'vue'
import {VueReCaptcha} from "vue-recaptcha-v3";
import App from './App.vue'
import Markdown from "./components/Markdown.vue";
import collapsible from "./directives/collapsible";
import router from './router'


// La clé publique ReCaptcha V3
const RECAPTCHA_PUBLIC_KEY = import.meta.env.VITE_RECAPTCHA_PUBLIC_KEY;

// Initialisation de Pinia (librairie de gestion de stores)
const pinia = createPinia();

// Il faut ajouter à la librairie les icônes font-awesome que l'on souhaite utiliser
library.add(faHeart, faGear, faArrowsSpin, faStar, faStarOutline, faStethoscope,
    faBars, faCheck, faLock, faChevronDown, faShareNodes, faLightbulb,
    faFileMedical, faPlus, faMinus, faCircle, faCircleArrowLeft, faScaleBalanced,
    faCirclePause, faCirclePlay, faCircleXmark, faClipboard, faXmark, faCircleArrowUp,
    faMaskFace, faListCheck, faCircleCheck, faEye, faMusic, faFilm, faImage, faFileLines,
    faPaperclip, faFacebook, faPen, faEyeSlash, faUser, faRightFromBracket, faChevronRight,
    faChevronLeft, faInfo, faCircleQuestion, faTimes, faInstagram, faMagnifyingGlass, faDice,
    faCircleExclamation, faRocket, faQuoteLeft, faPaperPlane, faRightToBracket, faScroll, faBookOpen,
    faClockRotateLeft, faFaceFrown, faFaceMeh, faFaceSmile, faFaceSmileBeam, faFaceGrinStars,
    faMedal, faLayerGroup, faBrain, faRotate, faArrowTurnUp, faArrowUp, faArrowLeft, faArrowRight,
    faRepeat, faClock, faBolt, faCalendarDay, faQuestion, faGraduationCap, faWandMagicSparkles, faTag,
    faFolder, faGauge, faGrimace, faHashtag, faTags, faPlay, faSliders, faFlag, faFilter, faBook, faRandom,
    faAward, faExternalLinkAlt, faPersonCirclePlus, faWallet, faSync, faHandshake, faShoppingCart, faCertificate, faCalendarAlt,
    faHourglassEnd, faTriangleExclamation, faHistory, faBan, faCalendarXmark, faFileAlt, faHourglassHalf,
    faPlusCircle, faUniversity, faUnlockAlt, faUserTag, faSignature, faLocationDot, faSave,
    faEnvelope, faKey, faComment, faArrowDown, faTrash, faInfoCircle, faCalendarPlus, faUsersLine, faThumbsDown, faThumbsUp,
    faStop, faWrench, faClone, faCircleNotch, faFileCircleQuestion, faAnchor, faBoxArchive, faArrowRotateRight, faExpand, faChevronUp, faTrophy, faRotateRight, faChartLine,
    faDumbbell, faChartPie, faSpinner, faUserCircle, faBorderAll);


// Création de l'application
const app = createApp(App)

const vueQueryPluginOptions = {
    queryClientConfig: {
        defaultOptions: {
            queries: {
                retry: false
            },
        },
    },
}

// AJOUT DES PLUGINS
app.use(router)
app.use(pinia)
app.use(VueQueryPlugin, vueQueryPluginOptions)
app.use(VueReCaptcha, {
    siteKey: RECAPTCHA_PUBLIC_KEY,
    loaderOptions: {
        autoHideBadge: true
    }
});

// AJOUT DES COMPONENTS CUSTOM
// icon-fa : <icon-fa icon="fa-solid fa-heart"/> (l'icône doit être importée dans la librairie ci-dessus)
app.component('icon-fa', FontAwesomeIcon)
// render-markdown : surcouche du component vue-markdown permettant un pré-traitement de la source et des options
app.component('render-markdown', Markdown)

// AJOUT DES DIRECTIVES CUSTOM
// Collapsible : <div v-collapsible="isExtended">...</div> permet de créer un élément
// collapse (cf. bootstrap) controllé par une variable réactive (ici isExtended)
app.directive('collapsible', collapsible)

// Montage de l'application
app.mount('#app')
