// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License.  You may obtain a copy of the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.  See the License for the
// specific language governing permissions and limitations
// under the License.

<template>
  <a-tooltip placement="bottom">
    <template #title>
      {{ name }}
    </template>
    <font-awesome-icon
      :icon="['fab', logo]"
      :size="size"
      :style="[$store.getters.darkMode ? { color: 'rgba(255, 255, 255, 0.65)' } : { color: '#666' }]"
      v-if="logo !== 'debian'" />
    <debian-icon
      v-else-if="logo === 'debian'"
      :width="size === '4x' ? 56 : 16"
      :height="size === '4x' ? 56 : 16"
      :style="{
        height: size === '4x' ? '56px' : '16px',
        width: size === '4x' ? '56px' : '16px',
        marginBottom: '-4px',
        background: $store.getters.darkMode ? 'rgba(255, 255, 255, 0.65)' : ''
      }" />
  </a-tooltip>
</template>

<script>
import { api } from '@/api'
import DebianIcon from '@/assets/icons/debian.svg?inline'

export default {
  name: 'OsLogo',
  components: {
    DebianIcon
  },
  props: {
    osId: {
      type: String,
      default: ''
    },
    osName: {
      type: String,
      default: ''
    },
    size: {
      type: String,
      default: 'lg'
    }
  },
  data () {
    return {
      name: '',
      osLogo: 'linux'
    }
  },
  computed: {
    logo: function () {
      if (!this.name) {
        this.fetchData()
      }
      return this.osLogo
    }
  },
  watch: {
    osId: function () {
      this.fetchData()
    }
  },
  methods: {
    fetchData () {
      if (this.osName) {
        this.discoverOsLogo(this.osName)
      } else if (this.osId) {
        this.findOsName(this.osId)
      }
    },
    findOsName (osId) {
      if (!('listOsTypes' in this.$store.getters.apis)) {
        return
      }
      this.name = 'linux'
      api('listOsTypes', { id: osId }).then(json => {
        if (json && json.listostypesresponse && json.listostypesresponse.ostype && json.listostypesresponse.ostype.length > 0) {
          this.discoverOsLogo(json.listostypesresponse.ostype[0].description)
        } else {
          this.discoverOsLogo('Linux')
        }
      })
    },
    discoverOsLogo (name) {
      this.name = name
      const osname = name.toLowerCase()
      if (osname.includes('centos')) {
        this.osLogo = 'centos'
      } else if (osname.includes('debian')) {
        this.osLogo = 'debian'
      } else if (osname.includes('ubuntu')) {
        this.osLogo = 'ubuntu'
      } else if (osname.includes('suse')) {
        this.osLogo = 'suse'
      } else if (osname.includes('redhat')) {
        this.osLogo = 'redhat'
      } else if (osname.includes('fedora')) {
        this.osLogo = 'fedora'
      } else if (osname.includes('linux')) {
        this.osLogo = 'linux'
      } else if (osname.includes('bsd')) {
        this.osLogo = 'freebsd'
      } else if (osname.includes('apple')) {
        this.osLogo = 'apple'
      } else if (osname.includes('window') || osname.includes('dos')) {
        this.osLogo = 'windows'
      } else if (osname.includes('oracle')) {
        this.osLogo = 'java'
      } else {
        this.osLogo = 'linux'
      }
      this.$emit('update-osname', this.name)
    }
  }
}
</script>

<style scoped>
</style>
