// Copyright 2015 clair authors
//
// Licensed 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.

package types

//
// import "fmt"
//
// // CVSSv2 represents the Common Vulnerability Scoring System (CVSS), that assesses the severity of
// // vulnerabilities.
// // It describes the CVSS score, but also a vector describing the components from which the score
// // was calculated. This provides users of the score confidence in its correctness and provides
// // insight into the nature of the vulnerability.
// //
// // Reference: https://nvd.nist.gov/CVSS/Vector-v2.aspx
// type CVSSv2 struct {
// 	// Base Vectors
// 	AccessVector     CVSSValue
// 	AccessComplexity CVSSValue
// 	Authentication   CVSSValue
// 	ConfImpact       CVSSValue
// 	IntegImpact      CVSSValue
// 	AvailImpact      CVSSValue
// 	// Temporal Vectors
// 	Exploitability   CVSSValue
// 	RemediationLevel CVSSValue
// 	ReportConfidence CVSSValue
// 	// Environmental Vectors
// 	CollateralDamagePotential        CVSSValue
// 	TargetDistribution               CVSSValue
// 	SystemConfidentialityRequirement CVSSValue
// 	SystemIntegrityRequirement       CVSSValue
// 	SystemAvailabilityRequirement    CVSSValue
// }
//
// func NewCVSSv2(value string) (*CVSSv2, error) {
//
// }
//
// // CVSSValue is the comprehensible value for a CVSS metric.
// type CVSSValue string
//
// // Metric acronym + Value abbreviation -> Comprehensible metric value.
// var toValue map[string]func(string) (CVSSValue, error)
//
// func init() {
// 	parsers = make(map[string]func(string) (CVSSValue, error), 14)
// 	toValue["AV"] = av
// 	toValue["AC"] = ac
// 	toValue["Au"] = au
// 	toValue["C"] = cAndIAndA
// 	toValue["I"] = cAndIAndA
// 	toValue["A"] = cAndIAndA
// 	toValue["E"] = e
// 	toValue["RL"] = rl
// 	toValue["RC"] = rc
// 	toValue["CDP"] = cdp
// 	toValue["TD"] = td
// 	toValue["CR"] = crAndIrAndAr
// 	toValue["IR"] = crAndIrAndAr
// 	toValue["AR"] = crAndIrAndAr
// }
//
// func av(v string) (CVSSValue, error) {
// 	switch v {
// 	case "L":
// 		return CVSSValue("Local access"), nil
// 	case "A":
// 		return CVSSValue("Adjacent Network"), nil
// 	case "N":
// 		return CVSSValue("Network"), nil
// 	default:
// 		return "", fmt.Errorf("%v is not a valid value for AV", v)
// 	}
// }
//
// func ac(v string) (CVSSValue, error) {
// 	switch v {
// 	case "H":
// 		return CVSSValue("High"), nil
// 	case "M":
// 		return CVSSValue("Medium"), nil
// 	case "L":
// 		return CVSSValue("Low"), nil
// 	default:
// 		return "", fmt.Errorf("%v is not a valid value for AC", v)
// 	}
// }
//
// func au(v string) (CVSSValue, error) {
// 	switch v {
// 	case "N":
// 		return CVSSValue("None required"), nil
// 	case "S":
// 		return CVSSValue("Requires single instance"), nil
// 	case "M":
// 		return CVSSValue("Requires multiple instances"), nil
// 	default:
// 		return "", fmt.Errorf("%v is not a valid value for Au", v)
// 	}
// }
//
// func cAndIAndA(v string) (CVSSValue, error) {
// 	switch v {
// 	case "N":
// 		return CVSSValue("None"), nil
// 	case "P":
// 		return CVSSValue("Partial"), nil
// 	case "C":
// 		return CVSSValue("Complete"), nil
// 	default:
// 		return "", fmt.Errorf("%v is not a valid value for C/I/A", v)
// 	}
// }
//
// func e(v string) (CVSSValue, error) {
// 	switch v {
// 	case "U":
// 		return CVSSValue("Unproven"), nil
// 	case "POC":
// 		return CVSSValue("Proof-of-concept"), nil
// 	case "F":
// 		return CVSSValue("Functional"), nil
// 	case "H":
// 		return CVSSValue("High"), nil
// 	case "ND":
// 		return CVSSValue("Not Defined"), nil
// 	default:
// 		return "", fmt.Errorf("%v is not a valid value for E", v)
// 	}
// }
//
// func rl(v string) (CVSSValue, error) {
// 	switch v {
// 	case "OF":
// 		return CVSSValue("Official-fix"), nil
// 	case "T":
// 		return CVSSValue("Temporary-fix"), nil
// 	case "W":
// 		return CVSSValue("Workaround"), nil
// 	case "U":
// 		return CVSSValue("Unavailable"), nil
// 	case "ND":
// 		return CVSSValue("Not Defined"), nil
// 	default:
// 		return "", fmt.Errorf("%v is not a valid value for RL", v)
// 	}
// }
//
// func rc(v string) (CVSSValue, error) {
// 	switch v {
// 	case "UC":
// 		return CVSSValue("Unconfirmed"), nil
// 	case "UR":
// 		return CVSSValue("Uncorroborated"), nil
// 	case "C":
// 		return CVSSValue("Confirmed"), nil
// 	case "ND":
// 		return CVSSValue("Not Defined"), nil
// 	default:
// 		return "", fmt.Errorf("%v is not a valid value for RC", v)
// 	}
// }
//
// func cdp(v string) (CVSSValue, error) {
// 	switch v {
// 	case "N":
// 		return CVSSValue("None"), nil
// 	case "L":
// 		return CVSSValue("Low"), nil
// 	case "LM":
// 		return CVSSValue("Low-Medium"), nil
// 	case "MH":
// 		return CVSSValue("Medium-High"), nil
// 	case "H":
// 		return CVSSValue("High"), nil
// 	case "ND":
// 		return CVSSValue("Not Defined"), nil
// 	default:
// 		return "", fmt.Errorf("%v is not a valid value for CDP", v)
// 	}
// }
//
// func td(v string) (CVSSValue, error) {
// 	switch v {
// 	case "N":
// 		return CVSSValue("None (0%)"), nil
// 	case "L":
// 		return CVSSValue("Low (1-25%)"), nil
// 	case "M":
// 		return CVSSValue("Medium (26-75%)"), nil
// 	case "H":
// 		return CVSSValue("High (76-100%)"), nil
// 	case "ND":
// 		return CVSSValue("Not Defined"), nil
// 	default:
// 		return "", fmt.Errorf("%v is not a valid value for TD", v)
// 	}
// }
//
// func crAndIrAndAr(v string) (CVSSValue, error) {
// 	switch v {
// 	case "L":
// 		return CVSSValue("Low"), nil
// 	case "M":
// 		return CVSSValue("Medium"), nil
// 	case "H":
// 		return CVSSValue("High"), nil
// 	case "ND":
// 		return CVSSValue("Not Defined"), nil
// 	default:
// 		return "", fmt.Errorf("%v is not a valid value for CR/IR/AR", v)
// 	}
// }