import pancelok from './pancel.json'
import pajzsok from './pajzs.json'
import fegyverek from './fegyver.json'

export type PancelType = 'konnyu' | 'nehez'

export const PancelTypes: PancelType[] = ['konnyu', 'nehez']

export interface Pancel {
    Id: string,
    Name: string,
    Type: PancelType
    VO: number,
    Price: number,
    Size: number
}

export interface Pajzs {
    Id: string,
    Name: string,
    Type: 'pajzs'
    VO: number,
    Price: number,
    Size: number
}

export interface Fegyver {
    Id: string,
    Name: string,
    Type: 'kozelharci' | 'dobhato' | 'lofegyver',
    Harcos: boolean,
    CsakNemHarcos: boolean,
    Masfelkezes: boolean,
    Ketkezes: boolean,
    KetkezesBonusz: boolean,
    HarciManover: boolean,
    Alakzat: boolean,
    Hosszu: boolean,
    Kabito: boolean,
    LovasRoham: boolean,
    PancelToro: boolean,
    PajzsZuzo: boolean,
    Rohamtoro: boolean,
    EroBonusz: boolean,
    Megterheltseg: boolean,
    Megjegyzes: string | undefined | null,
    Price: number,
    DamageMultiplier: number,
    DamageDice: number,
    NumberOfDamageDice: number,
    DamageBonus: number,
    CritRangeStart: number,
    CritMultiplier: number,
    Range: number,
    Size: number
}

export interface KarakterFelszereles {
    pancelID?: string
    pajzsID?: string
    fegyverIDk: string[]
}

export const DefaultFelszereles: KarakterFelszereles = {
    fegyverIDk: [],
}

export function PancelTypeLabel(type: PancelType): string {
    let result: string
    switch(type) {
        case 'konnyu': 
            result = 'Könnyű'
            break
        case 'nehez':
            result = 'Nehéz'
            break
        default:
            result = 'Egyéb páncél'
    }
    return result
}

export function GetPancel(id?: string): Pancel | undefined {
    if (id == null) {
        return undefined
    }
    const filteredPancel = pancelok['pancel'].filter(p => p.Id === id) as Pancel[]
    return filteredPancel.length > 0 ? filteredPancel[0] : undefined
}

export function MaxAbilityVO(p: PancelType) {
    switch(p){
        case 'konnyu': return 9999;
        case 'nehez': return 1;
        default: return 9999;
    }
}

export function GetPajzs(id?: string): Pajzs | undefined {
    if (id == null) {
        return undefined
    }
    const filtered = pajzsok['pajzs'].filter(p => p.Id === id) as Pajzs[]
    return filtered.length > 0 ? filtered[0] : undefined
}

export function GetFegyver(id: string): Fegyver | undefined {
    return fegyverek.data.find(f => f.Id === id) as Fegyver | undefined
}

export function GetFegyverek(ids: string[]): Fegyver[] {
    return ids.map(GetFegyver).filter(x => x != null).map(x => x as Fegyver)
}
export const defaultFegyverID = 'okol'
export const defaultFegyver = GetFegyver('okol')!