import { Injectable, Input } from '@angular/core'
import { Observable, of as observableOf } from 'rxjs'
import { map } from 'rxjs/operators'

// import { Apollo, gql } from 'apollo-angular'

import { Store } from './admin-manage/data.service'

export class Project {
    constructor(
        public id: number,
        public name: string,
    ) {}
}

export class Surveyor {
    constructor(
        public id: number,
        public name: string,
    ) {}
}

export class Equipment {
    constructor(
        public id: number,
        public name: string,
    ) {}
}

export class SurveyMeta {
    constructor(
        public projects: Project[],
        public surveyors: Surveyor[],
        public equipments: Equipment[],
        public statuses: string[],
        public stores_misc: Store[],
        public stores_line_work: Store[],
        public defaults: Object
    ) {}
}

// const getSurveyMeta = gql`
// query survey_meta {
//     survey_meta {
//         projects {
//             id
//             name
//         }
//         surveyors {
//             id
//             name
//         }
//         equipments {
//             id
//             name
//         }
//         stores_misc {
//             name
//         }
//         stores_line_work {
//             name
//         }
//         statuses
//         default
//     }
// }
// `

// const admin_models_menu_bar_query = gql`
// query admin_models_menu_bar {
//     admin_models_menu_bar{
//         name
//         items{
//             name
//             module
//         }
//     }
// }`

@Injectable()
export class AdminDataService {
    surveyMeta: SurveyMeta

    constructor(
        // private apollo: Apollo,
    ) {}

    getModelsMenuBar(): Observable<object[]> {
        console.warn('Migrate Graphql')
        return observableOf()
        // return this.apollo.query({
        //     query: admin_models_menu_bar_query
        // }).pipe(map(
        //     res => res['admin_models_menu_bar_query']
        // ))
    }

    getSurveyMeta(): Observable<SurveyMeta> {
        console.warn('Migrate Graphql')
        return observableOf()
    //     return this.apollo.query({
    //         query: getSurveyMeta,
    //     }).pipe(map(
    //         resp => {
    //             let data = resp['data']['survey_meta']
    //             this.surveyMeta = new SurveyMeta(
    //                 data['projects'].map(
    //                     item => new Project(item['id'], item['name'])
    //                 ).sort((i, j) => i.name > j.name ? 1 : -1),
    //                 data['surveyors'].map(
    //                     item => new Surveyor(item['id'], item['name'])
    //                 ).sort((i, j) => i.name > j.name ? 1 : -1),
    //                 data['equipments'].map(
    //                     item => new Equipment(item['id'], item['name'])
    //                 ).sort((i, j) => i.name > j.name ? 1 : -1),
    //                 data['statuses'],
    //                 data['stores_misc'].map(
    //                     item => new Store(item['name'])
    //                 ).sort((i, j) => i.name > j.name ? 1 : -1),
    //                 data['stores_line_work'].map(
    //                     item => new Store(item['name'])
    //                 ).sort((i, j) => i.name > j.name ? 1 : -1),
    //                 JSON.parse(data['default']),
    //             )
    //             return this.surveyMeta
    //         }
    //     ))
    }
}