"use client";

import React from "react";
import { Form, Input, Toast } from "antd-mobile";
import { cryptoPassword, generateSignature } from "@/utils/crypto";
import { useRouter, useSearchParams } from "next/navigation";
import baseRequest from "@/utils/baseRequest";

export default function SetPassword() {
  const router = useRouter();
  const searchParams = useSearchParams();

  //点击登录
  const handleSubmit = async (value) => {
    if (!value.password) {
      Toast.show({
        content: "请完善信息",
      });
      return;
    }
    if (value.password.length < 8) {
      Toast.show({
        content: "密码不得小于8位",
      });
      return;
    }
    if (value.password.length > 15) {
      Toast.show({
        content: "密码不得大于15位",
      });
      return;
    }
    if (!value.confirm_password) {
      Toast.show({
        content: "请再次输入您的密码",
      });
      return;
    }
    if (value.password != value.confirm_password) {
      Toast.show({
        content: "两次输入密码不一致",
      });
      return;
    }
    const mobile_phone = searchParams.get("mobile_phone");
    const region_code = searchParams.get("region_code");
    if (!mobile_phone || !region_code) {
      Toast.show({
        content: "设置出错，请下载app设置密码",
      });
      return;
    }
    //MD5加密密码
    const encryptedPassword = cryptoPassword(value.password);
    //设置密码并登录
    const base = baseRequest();
    const signature = generateSignature({
      mobile_phone: mobile_phone,
      region_code: region_code,
      new_password: encryptedPassword,
      ...base,
    });
    try {
      const response = await fetch(
        `/api/login/set_password?signature=${signature}`,
        {
          method: "POST",
          headers: {
            "Content-Type": "application/json",
          },
          body: JSON.stringify({
            mobile_phone: mobile_phone,
            region_code: region_code,
            new_password: encryptedPassword,
            ...base,
          }),
        }
      );
      const data = await response.json();
      if (data.ret === -1) {
        Toast.show({
          content: data.msg,
        });
        router.back();
        return;
      }
      router.back();
    } catch (error) {
      console.error(error);
    }
  };

  return (
    <section className="flex flex-1 flex-col">
      <div className="flex flex-row justify-center mt-24">
        <Form
          style={{
            "--border-top": "0",
            "--border-bottom": "0",
            "--border-inner": "0",
          }}
          layout="horizontal"
          onFinish={handleSubmit}
        >
          <div className="w-96 p-4 bg-[#07050A]">
            <h1 className="text-3xl font-semibold">设置密码</h1>
            <p className="text-base text-secondary mb-10">请牢记密码</p>
            <div className="rounded-2xl overflow-hidden border-neutral border">
              <Form.Item name="password">
                <div className="flex flex-row">
                  <p className="mr-4 text-white whitespace-nowrap">密码</p>
                  <Input placeholder="请输入密码" type="password" clearable />
                </div>
              </Form.Item>
              <hr className="mx-4 border-neutral" />
              <Form.Item name="confirm_password">
                <div className="flex flex-row">
                  <p className="mr-4 text-white whitespace-nowrap">确认密码</p>
                  <Input
                    placeholder="请再次输入密码"
                    type="password"
                    clearable
                  />
                </div>
              </Form.Item>
            </div>
            <div className="flex flex-col items-center mt-12">
              <button
                type="submit"
                className="btn btn-primary w-full text-base text-white font-medium"
              >
                登录
              </button>
              <p
                onClick={() => router.back()}
                className="text-base inline-block text-secondary text-center font-medium mt-4"
              >
                跳过
              </p>
            </div>
          </div>
        </Form>
      </div>
    </section>
  );
}
