import { Injectable } from '@angular/core'; export interface Minigame { name: string; url: string; comingSoon?: boolean; } export interface CardParagraph { heading: string; content: string; } export interface Card { info: CardParagraph[]; imageUrl: string; name: string; types: Array<"endangered" | "normal">; } export interface Answer { choises: string[]; correctChoise: string; } export interface Question { category: string; question: string; photoUrlsAbove?: string[]; answer: Answer; } export interface Saved { id: string; el: T; } @Injectable({ providedIn: 'root' }) export class DbService { private mock_minigames: Saved[] = [ { id: '0', el: { name: 'Рециклиране', url: '/minigames/conveyor-belt', comingSoon: true, } }, { id: '0', el: { name: 'BioTrivia', url: '/minigames/biotrivia', } } ]; private mock_card_types: Saved[] = [ { id: '0', el: { name: 'Пингвин', types: ['normal'], imageUrl: '/assets/images/cards/pingvin.jpg', info: [ { content: 'Тъй като нямат естествен враг на сушата, пингвините не показват страх, а любопитство когато към тях се приближи човек.', heading: 'Интересно' } ] } }, { id: '1', el: { name: 'Пингвин', types: ['normal'], imageUrl: '/assets/images/cards/pingvin2.jpg', info: [ { content: 'Пингвините мътят яйцата си на смени. Когато мъжкият отиде да яде, той не може да намери пътя обратно към гнездото и започва да крещи шумно. Женските разпознават гласовете на партньорите си сред хиляди други и крещят в отговор, така че те да знаят къде да се върнат.', heading: 'Интересно' } ] } }, { id: '2', el: { name: 'Делфин', types: ['normal'], imageUrl: '/assets/images/cards/delfin.jpg', info: [ { content: 'Делфините общуват по между си с помощта на звуци, като всеки звук може да изразява различно настроение.', heading: 'Интересно' } ] } }, { id: '3', el: { name: 'Делфин', types: ['normal'], imageUrl: '/assets/images/cards/delfin2.jpg', info: [ { content: 'Делфините никога не заспиват напълно. Докато си почиват, едната половина на мозъка им продължава да бъде активна. Ето защо дори и по време на сън едното им око остава отворено.', heading: 'Интересно' } ] }, }, { id: '4', el: { name: 'Син кит', types: ['normal'], imageUrl: '/assets/images/cards/sinkit.jpg', info: [ { content: 'Освен най-едрото, синият кит е и най-шумното животно – звукът, който издава е от порядъка на 188 децибела и може да бъде чут на разстояние до 800 км. За сравнение, звукът на пътнически самолет е „едва” 120 децибела.', heading: 'Интересно' } ] } }, { id: '5', el: { name: 'Син кит', types: ['normal'], imageUrl: '/assets/images/cards/sinkit2.jpg', info: [ { content: 'Езикът на кита тежи около 4,7 тона', heading: 'Интересно' } ] } }, { id: '6', el: { name: 'Пор', types: ['endangered'], imageUrl: '/assets/images/cards/por.jpg', info: [ { heading: 'Морфология на "пор"', content: 'Думата "пор" произлиза от латински и означава "крадец".', }, { heading: 'Застрашен вид', content: 'Загубата на местообитания и бракониерството, са причина днес те или техните следи да се наблюдават изключително рядко.', }, ], }, }, { id: '7', el: { name: 'Кафява мечка', types: ['endangered'], imageUrl: '/assets/images/cards/kafqva-mechka.jpg', info: [ { heading: 'Сладки сънища', content: 'Учените вярват, че мечките могат да сънуват.', }, { heading: 'Fast as f', content: 'Макар да изглеждат тромави,мечките могат да тичат с до 60 км/ч.', }, { heading: 'Застрашен вид', content: 'За съжаление хората им нанасят непоправими щети, като разкъсват с пътища и огради ареала им, унищожават горите и ги избиват.', }, ], }, }, { id: '8', el: { name: 'Балканска дива коза', types: ['endangered'], imageUrl: '/assets/images/cards/koza.jpg', info: [ { heading: 'Властелина на пръстените', content: 'Знаехте ли, че всяка година се прибавя по още един пръстен върху рогата на дивата коза, като така може да се определи възрастта на даденото животно.', }, { heading: 'И ся почваме да бегами', content: 'На света няма друго животно, което да притежава по-голяма ловкост и бързина на придвижване по хлъзгави и стръмни терени.', }, ], }, }, { id: '9', el: { name: 'Прилеп', types: ['endangered'], imageUrl: '/assets/images/cards/prilep.jpg', info: [ { heading: 'Напаст пещерна', content: 'най-голямата колония от прилепи в света наброява над 20 милиона броя от тези летящи създания.', }, { heading: 'Ехо .... (ехо)', content: 'Прилепите използват ехолокация, за да се заобиколят в тъмното.', }, { heading: 'Защитен вид', content: 'Според българското законодателство, прилепите са защитени видове.', }, ], }, }, { id: '10', el: { name: 'Лалугер', types: ['endangered'], imageUrl: '/assets/images/cards/laluger.jpg', info: [ { heading: 'Втори братовчед на ленивеца', content: 'Когато е студено, той заспива зимен сън и се събужда едва през пролетта.', }, { heading: 'Мали ша са напикая', content: 'Когато е изплашен, той застава на задните си лапи.', }, { heading: 'Защитен вид', content: 'Интензивно селско стопанство и използване на пестициди причиняват бързото изчезване на този вид.', }, ], }, }, { id: '11', el: { name: 'Етруската земеровка', types: ['endangered'], imageUrl: '/assets/images/cards/zemerovka.jpg', info: [ { heading: 'Размер', content: 'Един от най-дребните бозайници на планетата с размери едва 3,6 до 5,2 см и тегло от 1,25 до 2,34 грама!', }, { heading: 'Лакомници', content: 'Етруската земеровка трява да яде непрекъснато за да може да живее.', }, ], }, }, { id: '12', el: { name: 'Тюленът монах', types: ['endangered'], imageUrl: '/assets/images/cards/tuleni.jpg', info: [ { heading: 'Техния живот', content: 'Те се крият в подводни пещери, където си почиват и раждат своите малки.', }, ], }, }, { id: '13', el: { name: 'Видра', types: ['endangered'], imageUrl: '/assets/images/cards/vidra.jpg', info: [ { heading: 'Мали колко сладко', content: 'Морските видри се държат за ръце докато спят, за да не бъдат разделени от теченията докато се носят по водната повърхност.', }, { heading: 'NO MERCY', content: 'В момент на опасност видрите показват бебетата си на хищниците, за да предизвикат съчувствие и по този начин да избегнат атаката.', }, ], }, }, { id: '14', el: { name: 'Ловен сокол', types: ['endangered'], imageUrl: '/assets/images/cards/sokol.jpg', info: [ { heading: 'Ловни навици', content: 'Те не ловуват близо до гнездата си, а се опитват да летят доколкото е възможно.', }, { heading: 'Застрашен вид', content: 'Има опасност от изчезване. Основната причина, поради която населението на ловния сокол намалява, е човешката дейност.', }, ], }, }, ]; private mock_questions: Saved[] = [ { id: '0', el: { category: 'animals', photoUrlsAbove: [ '/assets/images/questions/slon.jpg' ], question: 'Защо бройката на слоновете в Африка намалява?', answer: { choises: [ 'Убиван е от други животни', 'Липса на храна', 'Убивани са от бракониери', 'Замърсяване на въздуха' ], correctChoise: 'Убивани са от бракониери', } } }, { id: '1', el: { category: 'animals', photoUrlsAbove: [ '/assets/images/questions/carski orel.jpg' ], question: 'Каква е главната причина за намаляването на бройките Царски орли?', answer: { choises: [ 'Бракониери', 'Замърсяване', 'Отсичане на горите', 'Електрически стълбове' ], correctChoise: 'Електрически стълбове', } } }, { id: '2', el: { category: 'animals', photoUrlsAbove: [ '/assets/images/questions/carski orel.jpg' ], question: 'Каква е главната причина за намаляването на бройките Царски орли?', answer: { choises: [ 'Бракониери', 'Замърсяване', 'Отсичане на горите', 'Електрически стълбове' ], correctChoise: 'Електрически стълбове', } } }, { id: '3', el: { category: 'animals', photoUrlsAbove: [ '/assets/images/questions/zlatna zhaba.png' ], question: 'Каква е причината за изчезването на Златната жаба?', answer: { choises: [ 'Глобално затопляне', 'Замърсяване на реките', 'Отсичане на горите', 'Недостиг на храна' ], correctChoise: 'Глобално затопляне', } } }, { id: '4', el: { category: 'animals', photoUrlsAbove: [ '/assets/images/questions/shtigga.png' ], question: 'Каква е причината за намаляването на бройките на Черният щъркел?', answer: { choises: [ 'Замърсяването на блатата и езерата', 'Недостиг на храна', 'Глобално затопляне', 'Естествени врагове', ], correctChoise: 'Замърсяването на блатата и езерата', } } }, { id: '5', el: { category: 'animals', photoUrlsAbove: [ '/assets/images/questions/tulen.jpg' ], question: 'Вярно или грешно. От 1996г. тюлените в Черно море намаляват, като днес те са почти изчезнали у нас.', answer: { choises: [ 'Вярно', 'Грешно', ], correctChoise: 'Грешно', } } }, { id: '6', el: { category: 'animals', photoUrlsAbove: [ '/assets/images/questions/ris.jpg' ], question: 'Каква е причината за намаляването на бройките рисове в България?', answer: { choises: [ 'Глобално затопляне', 'Незаконно избиване за козината им', 'Разрушаването на местообитанията им', 'Убиван е от естествени врагове', ], correctChoise: 'Незаконно избиване за козината им', } } }, ]; private mock_question_categories: string[] = [ 'animals' ]; private getRandomEls(array: T[], n: number): T[] { const result: T[] = new Array(n); let len = array.length; const taken = new Array(len); if (n > len) throw new RangeError("getRandom: more elements taken than available"); while (n--) { const x = Math.floor(Math.random() * len); result[n] = array[x in taken ? taken[x] : x]; taken[x] = --len in taken ? taken[len] : len; } return result; } getAllMinigames(): Saved[] { return this.mock_minigames; } getAllCards(): Saved[] { return this.mock_card_types; } getMinigame(id: string): Minigame { const index = this.mock_minigames.findIndex(v => v.id === id); if (index < 0) return null; else return this.mock_minigames[index].el; } getCard(id: string): Card { const index = this.mock_card_types.findIndex(v => v.id === id); if (index < 0) return null; else return this.mock_card_types[index].el; } getRandomQuestions(n: number, category: string): Question[] { return this.getRandomEls(this.mock_questions .filter(v => v.el.category === category) .map(v => v.el), n); } getRandomCategory(): string { return this.getRandomEls(this.mock_question_categories, 1)[0]; } constructor() { } }