//
// Copyright 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License").
// You may not use this file except in compliance with the License.
// A copy of the License is located at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// or in the "license" file accompanying this file. This file 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.
//
//  PropertiesViewController.m
//

#import "PropertiesViewController.h"

@interface PropertiesViewController ()

@end

@implementation PropertiesViewController

{
    NSArray *tableKeys;
    NSArray *tableValues;
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
}


- (void)viewDidLoad {
    [super viewDidLoad];
    tableKeys = [self.properties allKeys];
    tableValues = [self.properties allValues];
    
    // init table view
    self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
    self.tableView.rowHeight = 60.0f;
    
    // must set delegate & dataSource, otherwise the the table will be empty and not responsive
    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
    
    [self.navigationItem setTitle:self.name];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [tableKeys count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *tableIdentifier = @"TableItem";
    
    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:tableIdentifier];
    
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:tableIdentifier];
        cell.textLabel.font = [UIFont systemFontOfSize:StyleDictionarySizeFontBase];
        cell.textLabel.textColor = [UIColor styleDictionaryColor:StyleDictionaryColorFontBase];
        cell.detailTextLabel.font = [UIFont systemFontOfSize:StyleDictionarySizeFontBase];
    }
    
    int count = [[[tableValues objectAtIndex:indexPath.row] allKeys] count];
    cell.textLabel.text = [tableKeys objectAtIndex:indexPath.row];
    
    NSDictionary *cellData = [tableValues objectAtIndex:indexPath.row];
    if ([cellData valueForKey:@"value"] == nil) {
        cell.detailTextLabel.text = [NSString stringWithFormat:@"%u", count];
    } else {
        cell.detailTextLabel.text = StyleDictionaryContentIconKeyboardArrowRight;
        cell.detailTextLabel.font = [UIFont iconFontOfSize:StyleDictionarySizeFontBase];
    }
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSDictionary *cellData = [tableValues objectAtIndex:indexPath.row];
    if ([cellData valueForKey:@"value"] != nil) {
        [self detailViewFor:cellData andName:[tableKeys objectAtIndex:indexPath.row]];
    } else {
        PropertiesViewController *controller = [[PropertiesViewController alloc] init];
        controller.name = [tableKeys objectAtIndex:indexPath.row];
        controller.properties = cellData;
        [self.navigationController pushViewController:controller animated:true];
    }
}

- (void)detailViewFor:(NSDictionary *)property andName:(NSString *)name {
    NSString *category = [property valueForKey:@"category"];
    NSString *type = [property valueForKey:@"type"];
    if ([category isEqualToString:@"color"]) {
        ColorDetailViewController *controller = [[ColorDetailViewController alloc] init];
        controller.name = name;
        controller.property = property;
        [self.navigationController pushViewController:controller animated:true];
    } else if ([category isEqualToString:@"content"] && [type isEqualToString:@"icon"]) {
        IconDetailViewController *controller = [[IconDetailViewController alloc] init];
        controller.name = name;
        controller.property = property;
        [self.navigationController pushViewController:controller animated:true];
    }
}

@end
