import 'package:flutter/material.dart';

import 'package:flutter_gen/gen_l10n/l10n.dart';

import 'package:fluffychat/widgets/layouts/one_page_card.dart';
import 'signup.dart';

class SignupPageView extends StatelessWidget {
  final SignupPageController controller;
  const SignupPageView(this.controller, {Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return OnePageCard(
      child: Scaffold(
        appBar: AppBar(
          title: Text(L10n.of(context)!.signUp),
        ),
        body: Form(
          key: controller.formKey,
          child: ListView(
            children: [
              Padding(
                padding: const EdgeInsets.all(12.0),
                child: TextFormField(
                  readOnly: controller.loading,
                  autocorrect: false,
                  controller: controller.usernameController,
                  autofillHints:
                      controller.loading ? null : [AutofillHints.username],
                  validator: controller.usernameTextFieldValidator,
                  decoration: InputDecoration(
                      prefixIcon: const Icon(Icons.account_circle_outlined),
                      hintText: L10n.of(context)!.username,
                      labelText: L10n.of(context)!.username,
                      prefixText: '@',
                      prefixStyle: const TextStyle(fontWeight: FontWeight.bold),
                      suffixStyle: const TextStyle(fontWeight: FontWeight.w200),
                      suffixText: ':${controller.domain}'),
                ),
              ),
              Padding(
                padding: const EdgeInsets.all(12.0),
                child: TextFormField(
                  readOnly: controller.loading,
                  autocorrect: false,
                  autofillHints:
                      controller.loading ? null : [AutofillHints.password],
                  controller: controller.passwordController,
                  obscureText: !controller.showPassword,
                  validator: controller.password1TextFieldValidator,
                  decoration: InputDecoration(
                    prefixIcon: const Icon(Icons.vpn_key_outlined),
                    hintText: '****',
                    suffixIcon: IconButton(
                      tooltip: L10n.of(context)!.showPassword,
                      icon: Icon(controller.showPassword
                          ? Icons.visibility_off_outlined
                          : Icons.visibility_outlined),
                      onPressed: controller.toggleShowPassword,
                    ),
                    labelText: L10n.of(context)!.password,
                  ),
                ),
              ),
              Padding(
                padding: const EdgeInsets.all(12.0),
                child: TextFormField(
                  readOnly: controller.loading,
                  autocorrect: false,
                  autofillHints:
                      controller.loading ? null : [AutofillHints.password],
                  controller: controller.passwordController2,
                  obscureText: true,
                  validator: controller.password2TextFieldValidator,
                  decoration: InputDecoration(
                    prefixIcon: const Icon(Icons.repeat_outlined),
                    hintText: '****',
                    labelText: L10n.of(context)!.repeatPassword,
                  ),
                ),
              ),
              Padding(
                padding: const EdgeInsets.all(12.0),
                child: TextFormField(
                  readOnly: controller.loading,
                  autocorrect: false,
                  controller: controller.emailController,
                  keyboardType: TextInputType.emailAddress,
                  autofillHints:
                      controller.loading ? null : [AutofillHints.username],
                  validator: controller.emailTextFieldValidator,
                  decoration: InputDecoration(
                    prefixIcon: const Icon(Icons.mail_outlined),
                    labelText: L10n.of(context)!.addEmail,
                    hintText: 'email@example.abc',
                  ),
                ),
              ),
              const Divider(),
              const SizedBox(height: 12),
              if (controller.error != null) ...[
                Padding(
                  padding: const EdgeInsets.symmetric(horizontal: 12),
                  child: Text(
                    controller.error!,
                    style: const TextStyle(color: Colors.red),
                    textAlign: TextAlign.center,
                  ),
                ),
                const SizedBox(height: 12),
                const Divider(),
                const SizedBox(height: 12),
              ],
              Hero(
                tag: 'loginButton',
                child: Padding(
                  padding: const EdgeInsets.symmetric(horizontal: 12),
                  child: ElevatedButton(
                    onPressed: controller.loading ? null : controller.signup,
                    child: controller.loading
                        ? const LinearProgressIndicator()
                        : Text(L10n.of(context)!.signUp),
                  ),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
