//
//  HardwareAuthorization.swift
//  Function
//
//  Created by mac on 2016/11/21.
//  Copyright © 2016年 mac. All rights reserved.
//

import UIKit
import CoreLocation
import Contacts
import AddressBook
import EventKit
import AssetsLibrary
import Photos
import CoreBluetooth

class HardwareAuthorization: NSObject {

    class func isAuthorizationLocation() -> Bool {
        let status = CLLocationManager.authorizationStatus()
        switch status {
        case .notDetermined:
            return true
        case .denied :
            return false
        case .restricted :
            return false
        default:
            break
        }
        return true
    }

    class func isAuthorizationAddress() -> Bool {
        if #available(iOS 9.0, *) {
            let status = CNContactStore.authorizationStatus(for: .contacts)
            switch status {
            case .notDetermined:
                return true
            case .denied :
                return false
            case .restricted :
                return false
            default:
                break
            }
        } else {
            let status = ABAddressBookGetAuthorizationStatus()
            switch status {
            case .notDetermined:
                return true
            case .denied :
                return false
            case .restricted :
                return false
            default:
                break
            }
        }
        return true
    }

    class func isAuthorizationReminders() -> Bool {
        return isAuthorizationEvent(entityType: .reminder)
    }

    class func isAuthorizationCalender() -> Bool {
        return isAuthorizationEvent(entityType: .event)
    }

    class func isAuthorizationEvent(entityType: EKEntityType) -> Bool {
        let status = EKEventStore.authorizationStatus(for: entityType)
        switch status {
        case .notDetermined:
            return true
        case .denied :
            return false
        case .restricted :
            return false
        default:
            break
        }
        return true
    }

    class func isAuthorizationPhotoAlbum() -> Bool {
        if #available(iOS 9.0, *) {
            let status = PHPhotoLibrary.authorizationStatus()
            switch status {
            case .notDetermined:
                return true
            case .denied :
                return false
            case .restricted :
                return false
            default:
                break
            }
        } else {
            let status = ALAssetsLibrary.authorizationStatus()
            switch status {
            case .notDetermined:
                return true
            case .denied :
                return false
            case .restricted :
            return false
            default:
                break
            }
        }
        return true
    }

    class func isAuthorizationBluetooth() -> Bool {
        let status = CBPeripheralManager.authorizationStatus()
        switch status {
        case .notDetermined:
            return true
        case .denied :
            return false
        case .restricted :
            return false
        default:
            break
        }
        return true
    }

    class func isAuthroizationCamera() -> Bool {
        let status = AVCaptureDevice.authorizationStatus(for: .video)
        switch status {
        case .notDetermined:
            return true
        case .denied :
            return false
        case .restricted :
            return false
        default:
            break
        }
        return true
    }

    class func isAuthroizationMicrophone() -> Bool {
        let status = AVAudioSession.sharedInstance().recordPermission().rawValue
        switch status {
        case 1:
            return true
        case 2:
            return false
        default:
            return true
        }
    }
}