import * as React from "react";
import { Checkbox, CheckboxProps, Form } from "semantic-ui-react";

import { Weekday, WEEKDAYS } from "@common/sprinklersRpc";

export interface WeekdaysViewProps {
    weekdays: Weekday[];
    editing: boolean;
    onChange?: (newWeekdays: Weekday[]) => void;
}

export default class WeekdaysView extends React.Component<WeekdaysViewProps> {
    render() {
        const { weekdays, editing } = this.props;
        let node: React.ReactNode;
        if (editing) {
            node = WEEKDAYS.map((weekday) => {
                const checked = weekdays.find((wd) => wd === weekday) != null;
                const name = Weekday[weekday];
                return (
                    <Form.Field
                        control={Checkbox}
                        x-weekday={weekday}
                        label={name}
                        checked={checked}
                        key={weekday}
                        onChange={this.toggleWeekday}
                    />
                );
            });
        } else {
            node = weekdays.map((weekday) => Weekday[weekday]).join(", ");
        }
        return (
            <Form.Group inline>
                <label>On</label> {node}
            </Form.Group>
        );
    }
    private toggleWeekday = (event: React.FormEvent<HTMLInputElement>, data: CheckboxProps) => {
        const { weekdays, onChange } = this.props;
        if (!onChange) {
            return;
        }
        const weekday: Weekday = Number(event.currentTarget.getAttribute("x-weekday"));
        if (data.checked) {
            const newWeekdays = weekdays.concat([weekday]);
            newWeekdays.sort();
            onChange(newWeekdays);
        } else {
            onChange(weekdays.filter((wd) => wd !== weekday));
        }
    }
}
