//
//  HandmanViewController.swift
//  Em-call
//
//  Created by Alex Sh on 17.02.2022.
//

import UIKit



class HandmanViewController: UIViewController, UITableViewDataSource,
                             UITableViewDelegate, UITextViewDelegate
{
    var settingsLauncher:SettingsLauncher = SettingsLauncher()
    let appDelegate = UIApplication.shared.delegate as? AppDelegate
    var dataStorage:DataStorage? = nil
   
    @IBOutlet weak var addPhotoTopConstraint: NSLayoutConstraint!
    @IBOutlet weak var tableView: UITableView!
    
    @IBOutlet weak var descTextView: UITextView!
    
    @IBOutlet weak var addr: UILabel!
    
    
    @IBOutlet weak var glidingView: GlidingCollection!
    fileprivate var collectionView: UICollectionView!
    fileprivate var items = ["gloves", "boots", "bindings", "hoodie"]
   // fileprivate var images: [[UIImage?]] = []
   // fileprivate var images = [UIImage(named: "plus")!]
    fileprivate var images: [UIImage?] = []
    let cellReuseIdentifier = "cell"
    var selRow:Int = 0
    
    var address = "Unknow address"
    var dateAndTime = "2022/02/23"
    var contact = "+1 123 112 11 22"
    var card = "**** **** **** 1234"

    
    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellReuseIdentifier)
      tableView.rowHeight = 45
       tableView.delegate = self
       tableView.dataSource = self
        descTextView.delegate = self
        
        settingsLauncher.delegate = self
        setup()
        glidingView.isHidden = true
        dataStorage = appDelegate?.dataStorage
    }
    
    override func viewWillAppear(_ animated: Bool) {
          super.viewWillAppear(animated)
          collectionView.reloadData()
          collectionView.collectionViewLayout.invalidateLayout()
        navigationController?.navigationBar.titleTextAttributes = [.foregroundColor:UIColor(red: 0 / 255, green: 0 / 255, blue: 0 / 255, alpha: 1.0)]
        title = "Handyman"
        let item1 = setBarButtom(str: "akar-icons_arrow-left")
        self.navigationItem.setLeftBarButtonItems([item1], animated: true)

       let item2 = setBarButtom(str: "gg_close")
        self.navigationItem.setRightBarButtonItems([item2], animated: true)
      }

    func setBarButtom(str:String)->UIBarButtonItem {
        let btn1 = UIButton(type: .custom)
         btn1.setImage(UIImage(named: str), for: .normal)
         btn1.frame = CGRect(x: 0, y: 0, width: 60, height: 60)
         btn1.addTarget(self, action: #selector(self.back), for: .touchUpInside)
         let item1 = UIBarButtonItem(customView: btn1)
        return item1
    }
    
    @objc
    func back() {
      //  navigationController?.popViewController( animated: true)
        let firstVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Logo")
        navigationController?.pushViewController(firstVC, animated: true)
    }

    @IBAction func pressAddPhoto(_ sender: Any) {
        guard let navVC = self.navigationController
        else { return }
        settingsLauncher.showSettings(navigVC: navVC,dispatcher:0)
        glidingView.isHidden = false
        addPhotoTopConstraint.constant = 102
    }
    
    @IBAction func BOOK_NOW_Click(_ sender: Any) {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let vc:UIViewController
        if #available(iOS 13.0, *) {
             vc = storyboard.instantiateViewController(identifier: "BookingVK") as! VKBookingViewController
        } else {
            vc = storyboard.instantiateViewController(withIdentifier: "BookingVK")
        }
         navigationController?.pushViewController(vc, animated: true)
    }
    
  //  @IBAction func tapGesture(_ sender: Any) {view.endEditing(true)  }
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        descTextView.resignFirstResponder()
    }
    
    func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
        // Создаём константу, именна через неё мы будем обращаться к свойствам и изменять их
    let header = view as! UITableViewHeaderFooterView
        // Установить цвет текста в label
    header.textLabel?.textColor = .darkGray
        // Установить цвет фона для секции
    header.tintColor = UIColor.white
        // Установить шрифт и размер шрифта для label
   // header.textLabel?.font = UIFont(name: "Helvetica-Regular", size: 15)
    }
    
     func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }
    
     func numberOfSections(in tableView: UITableView) -> Int {
        return 4
    }// Default is 1 if not implemented
    
   func tableView(_ tableView: UITableView, titleForHeaderInSection                                 section: Int) -> String? {
       switch section {
        case 0:            return ("Work location")
        case 1:            return ("Date and Time")
        case 2:            return ("Your contacts")
        case 3:            return ("Payment")
        default:            return ("Work location")
        }     // return ("Work location")
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
         // let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier, for: indexPath)
        var cell:CustCellTableViewCell
        let section = indexPath.section
        switch section {
        case 0:
          cell = tableView.dequeueReusableCell(withIdentifier: "cust_cell") as! CustCellTableViewCell
          cell.custCell.text = address
        case 1:
           cell = tableView.dequeueReusableCell(withIdentifier: "cust_cell") as! CustCellTableViewCell
          cell.custCell.text = dateAndTime                 // cell.imageCell.isHidden = true
          cell.imageCell?.image = UIImage(named: "uil_calendar-alt")
        case 2:
           cell = tableView.dequeueReusableCell(withIdentifier: "cust_cell2") as! CustCellTableViewCell
          cell.custCell2?.text = contact
        case 3:
           cell = tableView.dequeueReusableCell(withIdentifier: "cust_cell") as! CustCellTableViewCell
          cell.custCell?.text = card
                  cell.imageCell?.image = UIImage(named: "Vector")
        default:
          cell = tableView.dequeueReusableCell(withIdentifier: "cust_cell2") as! CustCellTableViewCell
         cell.custCell2?.text = contact
        }
         cell.accessoryType = UITableViewCell.AccessoryType.disclosureIndicator
          return cell
    }
    
    // method to run when table view cell is tapped
     func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let nameXibName = ["Map","Calendar"]
        let section = indexPath.section
        var vc:UIViewController
        switch section        //if indexPath.row == 0
        {
        case 0:               vc = storyboard.instantiateViewController(withIdentifier: nameXibName[0])
                 (vc as! MapViewController).delegate = self
            navigationController?.pushViewController(vc , animated: true)
        case 1:                 vc = storyboard.instantiateViewController(withIdentifier: nameXibName[1])
              (vc as! CalendarViewController).delegate = self
            navigationController?.pushViewController(vc , animated: true)
          case 2:
             vc = storyboard.instantiateViewController(withIdentifier: nameXibName[1])
         (vc as! CalendarViewController).delegate = self
            navigationController?.pushViewController(vc , animated: true)
        case 3:
             vc = storyboard.instantiateViewController(withIdentifier: nameXibName[1])
        (vc as! CalendarViewController).delegate = self
            navigationController?.pushViewController(vc , animated: true)
        default:            return
        }
        
     }

}
// MARK: - Setup
extension HandmanViewController {
  
  func setup() {
    setupGlidingCollectionView()
   // loadImages()
  }
  
  private func setupGlidingCollectionView() {
    glidingView.dataSource = self
    
    let nib = UINib(nibName: "CollectionCell", bundle: nil)
    collectionView = glidingView.collectionView
    collectionView.register(nib, forCellWithReuseIdentifier: "Cell")
    collectionView.delegate = self
    collectionView.dataSource = self
    collectionView.backgroundColor = glidingView.backgroundColor
  }

}

// MARK: - CollectionView 🎛
extension HandmanViewController: UICollectionViewDataSource, UICollectionViewDelegate {
  
  func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
   // let section = glidingView.expandedItemIndex
    return images.count
  }
  
  func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as? CollectionCell else { return UICollectionViewCell() }
    ////let section = glidingView.expandedItemIndex
    if images.count>0 {
    let image = images[indexPath.row]
   // let image = images[0]
    cell.imageView.image = image
    }
    cell.contentView.clipsToBounds = true
    
    let layer = cell.layer
    let config = GlidingConfig.shared
    layer.shadowOffset = config.cardShadowOffset
    layer.shadowColor = config.cardShadowColor.cgColor
    layer.shadowOpacity = config.cardShadowOpacity
    layer.shadowRadius = config.cardShadowRadius
    
    layer.shouldRasterize = true
    layer.rasterizationScale = UIScreen.main.scale
    
    return cell
  }
  
  func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let section = glidingView.expandedItemIndex
    let item = indexPath.item
    print("Selected item #\(item) in section #\(section)")
  }
  
}
// MARK: - Gliding Collection 🎢
extension HandmanViewController: GlidingCollectionDatasource {
  
  func numberOfItems(in collection: GlidingCollection) -> Int {
   // return items.count
    return 0
  }
  
  func glidingCollection(_ collection: GlidingCollection, itemAtIndex index: Int) -> String {
   // return "– " + items[index]
    return "– "
  }
}

extension HandmanViewController:MapViewControllerDelegate {
    func delegateClick(text:String) {
        address = text
     //   NotificationCenter.default.post(name: NSNotification.Name(rawValue: "delegateClick"), object: nil)
        tableView.reloadData()
    }
}
extension HandmanViewController:CalendarViewControllerDelegate {
    func calendarDelegateClick(text:String,flagData:Int) {
         switch flagData {
        case 0:
            dateAndTime = text
        case 1:
            contact = text
        case 2:
            card = text
        default:
            break
        }
        tableView.reloadData()
    }
}

extension HandmanViewController:SettingsLauncherDelegate {
    func settingsDelegateClick(img: UIImage?,selRow:Int,imgName:String?) {
        if img != nil {
            images.append(img!)
            collectionView.reloadData()
        }
        else {
            self.selRow = selRow
        }
    }
}
