/* eslint-disable react-native/no-inline-styles */
/* eslint-disable react-native/no-color-literals */

import { storiesOf } from '@storybook/react-native';
import * as React from 'react';
import { View, ViewStyle } from 'react-native';
import { Toggle } from 'react-powerplug';

import { StoryScreen, Story, UseCase } from '~/storybook/views';

import { LabeledSwitch } from './labeled-switch';
import { Switch } from './switch';

declare let module;

const styleArray: ViewStyle[] = [{ borderColor: '#686868' }];

const trackOffStyle: ViewStyle[] = [
  { backgroundColor: '#686868' },
  {
    height: 80,
    borderRadius: 0,
  },
];
const trackOnStyle: ViewStyle[] = [
  {
    backgroundColor: '#b1008e',
    borderColor: '#686868',
  },
  {
    height: 80,
    borderRadius: 0,
  },
];
const thumbOffStyle: ViewStyle[] = [
  {
    backgroundColor: '#b1008e',
    borderColor: '#686868',
  },
  {
    height: 80,
    borderRadius: 0,
  },
];
const thumbOnStyle: ViewStyle[] = [
  { backgroundColor: '#f0c' },
  {
    height: 80,
    borderRadius: 0,
    borderColor: '#686868',
  },
];

storiesOf('Switch', module)
  .addDecorator((fn) => <StoryScreen>{fn()}</StoryScreen>)
  .add('Behaviour', () => (
    <Story>
      <UseCase text="The Toggle Switch" usage="Use the switch to represent on/off states.">
        <Toggle initial={false}>
          {({ on, toggle }) => <Switch value={on} onToggle={toggle} />}
        </Toggle>
      </UseCase>
      <UseCase text="value = true" usage="This is permanently on.">
        <Switch value />
      </UseCase>
      <UseCase text="value = false" usage="This is permanantly off.">
        <Switch value={false} />
      </UseCase>
    </Story>
  ))
  .add('Styling', () => (
    <Story>
      <UseCase text="Custom Styling" usage="Promise me this won't happen.">
        <Toggle initial={false}>
          {({ on, toggle }) => (
            <View>
              <Switch
                thumbOffStyle={{ backgroundColor: 'pink' }}
                thumbOnStyle={{ backgroundColor: 'cyan' }}
                trackOffStyle={{ backgroundColor: 'red', borderColor: 'maroon' }}
                trackOnStyle={{ backgroundColor: 'green', borderColor: 'black' }}
                value={on}
                onToggle={toggle}
              />
            </View>
          )}
        </Toggle>
      </UseCase>

      <UseCase text="Style array" usage="This either.">
        <Toggle initial={false}>
          {({ on, toggle }) => (
            <View>
              <Switch
                style={styleArray}
                thumbOffStyle={thumbOffStyle}
                thumbOnStyle={thumbOnStyle}
                trackOffStyle={trackOffStyle}
                trackOnStyle={trackOnStyle}
                value={on}
                onToggle={toggle}
              />
            </View>
          )}
        </Toggle>
      </UseCase>
      <UseCase text="LabeledSwitch" usage="default usage">
        <Toggle initial={false}>
          {({ on, toggle }) => (
            <View>
              <LabeledSwitch
                label="label switch"
                offLabel="off label"
                value={on}
                onLabel="on label"
                onToggle={toggle}
              />
            </View>
          )}
        </Toggle>
      </UseCase>
      <UseCase text="Without title" usage="Label without title">
        <Toggle initial={false}>
          {({ on, toggle }) => (
            <View>
              <LabeledSwitch offLabel="off label" value={on} onLabel="on label" onToggle={toggle} />
            </View>
          )}
        </Toggle>
      </UseCase>
      <UseCase text="Only left text" usage="Label only with text on its left">
        <Toggle initial={false}>
          {({ on, toggle }) => (
            <View>
              <LabeledSwitch offLabel="left label" value={on} onToggle={toggle} />
            </View>
          )}
        </Toggle>
      </UseCase>
      <UseCase text="Only right text" usage="Label only with text on its right">
        <Toggle initial={false}>
          {({ on, toggle }) => (
            <View>
              <LabeledSwitch value={on} onLabel="right label" onToggle={toggle} />
            </View>
          )}
        </Toggle>
      </UseCase>
    </Story>
  ));
