// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:sky/theme/colors.dart';
import 'package:sky/theme/typography.dart';
import 'package:sky/widgets/basic.dart';
import 'package:sky/widgets/material.dart';
import 'package:sky/widgets/scaffold.dart';
import 'package:sky/widgets/tabs.dart';
import 'package:sky/widgets/tool_bar.dart';
import 'package:sky/widgets/widget.dart';

class TabbedNavigatorApp extends App {
  static Iterable<String> items = const <String>["ONE", "TWO", "FREE", "FOUR"];
  final List<int> navigatorSelections = new List<int>.filled(items.length, 0);

  Widget buildTabNavigator(Iterable<TabLabel> labels, int navigatorIndex) {
    TabBar tabBar = new TabBar(
      labels: labels.toList(),
      selectedIndex: navigatorSelections[navigatorIndex],
      onChanged: (selectionIndex) {
        setState(() { 
          navigatorSelections[navigatorIndex] = selectionIndex;
        });
      }
    );

    return new Container(child: tabBar, margin: new EdgeDims.only(bottom: 16.0));
  }

  Widget build() {
    Iterable<TabLabel> textLabels = items
      .map((s) => new TabLabel(text: "ITEM " + s));

    Iterable<TabLabel> iconLabels = items
      .map((s) => new TabLabel(icon: 'action/search_white'));

    Iterable<TabLabel> textAndIconLabels = items
      .map((s) => new TabLabel(text: "ITEM " + s, icon: 'action/search_white'));

    var navigatorIndex = 0;
    Iterable<Widget> tabNavigators = [textLabels, iconLabels, textAndIconLabels]
      .map((labels) => buildTabNavigator(labels, navigatorIndex++));

    ToolBar toolbar = new ToolBar(
      center: new Text('Tabbed Navigator', style: white.title)
    );

    return new Scaffold(
      toolbar: toolbar,
      body: new Material(
        child: new Center(child: new Block(tabNavigators.toList())),
        color: Grey[500]
      )
    );
  }
}

void main() {
  runApp(new TabbedNavigatorApp());
}
