<template>
  <div class="login-page">
    <div class="content">
      <div class="back-button" @click="goBack">
        <img src="@/assets/images/arrow_left.png" class="back-icon" />
      </div>

      <div class="header">
        <div class="title">Sign up.</div>
        <p class="subtitle">Redefine the styling experience with AI.</p>
        <p class="subtitle">Use Styling Angel to speed up your fashion journey.</p>
      </div>

      <div class="login-container">
        <div class="login-form">
          <div class="input-group">
            <input type="text" v-model="formData.name" placeholder="Name" class="input-field" />
          </div>
          <div class="input-group">
            <input type="email" v-model="formData.email" placeholder="Email" class="input-field" />
          </div>
          <div class="input-group pwd">
            <input
              type="password"
              v-model="formData.password"
              placeholder="Your Password"
              class="input-field"
            />
          </div>

          <button type="button" class="login-button" @click="handleConfirm">Sign Up</button>

          <GoogleLogin text="Sign up with Google" @googelLogin="handleGoogleSignup" ref="googleSignupRef" @click="clickGooleLogin" />
        </div>
      </div>
    </div>

    <div class="footer">
      <p>Powered by AiDLab for Lane Crawford</p>
    </div>
  </div>
</template>

<script setup lang="ts">
import { ref, reactive } from 'vue'
import { useRouter } from 'vue-router'
import { showToast } from 'vant'
import { fetchRegisterOrLogin, googleAuth } from '@/api/login'
import { encryptPassword } from '@/utils/tools'
import { useUserInfoStore } from '@/stores'
import GoogleLogin from './components/GoogleLogin.vue'

const router = useRouter()
const userInfoStore = useUserInfoStore()

// 表单数据
const formData = reactive({
  name: '',
  email: '',
  password: ''
})

// 加载状态
const isLoading = ref(false)

// 表单验证规则
const validateEmail = (email: string) => {
  const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
  return emailRegex.test(email)
}

const validatePassword = (password: string) => {
  return password.length >= 6
}

// 验证表单
const validateForm = () => {
  // 验证邮箱
  if (!formData.name) {
    showToast('Please input your name')
    return false
  }

  // 验证邮箱
  if (!formData.email) {
    showToast('Please input your email')
    return false
  } else if (!validateEmail(formData.email)) {
    showToast('Please input valid email')
    return false
  }

  // 验证密码
  if (!formData.password) {
    showToast('Please input password')
    return false
  } else if (!validatePassword(formData.password)) {
    showToast('Password must be at least 6 characters')
    return false
  }

  return true
}

// 返回上一页
const goBack = () => {
  router.go(-1)
}

// 处理注册
const handleConfirm = async () => {
  if (!validateForm()) {
    return
  }

  isLoading.value = true

  const encryptedPassword = encryptPassword(formData.password)
  fetchRegisterOrLogin({ ...formData, password: encryptedPassword, operationType: 'REGISTER' })
    .then((res) => {
      console.log('res', res)
      showToast('Register successful')
      router.push('/login')
    })
    .catch((err) => {
      console.log('err', err)
      showToast(err.message)
    })
    .finally(() => {
      isLoading.value = false
    })
}
const googleSignupRef = ref(null)
const clickGooleLogin = () => {
  googleSignupRef.value?.login()
}
// 处理Google注册
const handleGoogleSignup = async (accessToken: string) => {
  try {
    isLoading.value = true
    const result = await googleAuth({ accessToken })
    userInfoStore.setToken(result.token)
    userInfoStore.setUserInfo(result.user)
    showToast('Google sign up successful')
    router.replace('/stylist/customer')
  } catch (error) {
    console.error('Google注册失败:', error)
    showToast(error?.message || 'Google sign up failed, please try again')
  } finally {
    isLoading.value = false
  }
}
</script>

<style scoped lang="less">
.login-page {
  position: relative;
  color: #fff;
  width: 100%;
  height: 100vh;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  background-image: url('@/assets/images/sginup_bg.png');
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  padding-top: 12rem;
  font-family: 'satoshiRegular';
}

.back-button {
  // position: absolute;
  // top: 2rem;
  // left: 2rem;
  margin-top: 2.4rem;
  margin-left: 6.1rem;
  width: 2rem;
  height: 3.4rem;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  z-index: 3;
  font-size: 3.4rem;
  .back-icon {
    width: 2.83rem;
    height: 3.47rem;
  }
}

.header {
  margin-top: 1.42rem;
  padding-left: 15.5rem;
  color: white;
  font-family: 'satoshiRegular';
  .title {
    font-size: 11rem;
    font-weight: bold;
    margin-bottom: 0.8rem;
    color: white;
    font-family: 'satoshiBold';
  }

  .subtitle {
    font-size: 3rem;
    color: white;
    font-weight: 400;
    line-height: 141%;
    letter-spacing: 0.08rem;
  }
}

.content {
  position: relative;
  // z-index: 2;
  flex: 1;
}

.login-container {
  display: flex;
  align-items: center;
  justify-content: center;
  margin-top: 7.2rem;
  .login-form {
    position: relative;
    width: calc(100% - 28.4rem);
    height: 118.4rem;
    background: radial-gradient(
      100% 100% at 0% 0%,
      rgba(115, 115, 115, 0.4) 0%,
      rgba(0, 0, 0, 0) 100%
    );
    backdrop-filter: blur(35px);
    -webkit-backdrop-filter: blur(35px);
    -moz-backdrop-filter: blur(35px);
    -ms-backdrop-filter: blur(35px);
    -o-backdrop-filter: blur(35px);
    border: 0.2rem solid rgba(255, 255, 255, 0.15);
    border-radius: 4.79rem;
    padding: 11.2rem 8.62rem 14.28rem 7.18rem;
    box-shadow: 0 0.8rem 3.2rem rgba(0, 0, 0, 0.1);
    overflow: hidden;
    border: 0.2rem solid #fff;
    font-size: 3.83rem;
  }

  .input-field {
    width: 100%;
    height: 10rem;
    padding: 1.6rem 2rem;
    border: 0.2rem solid #fff;
    background: transparent;
    border-radius: 7.1rem;
    color: white;
    outline: none;
    font-size: 3.83rem;
    padding: 0 5.5rem;
  }

  .input-field::placeholder {
    color: rgba(255, 255, 255, 0.6);
    font-size: 3.83rem;
  }

  .input-group {
    margin-bottom: 4rem;
    &.pwd {
      margin-bottom: 6.7rem;
    }
  }
  .login-button {
    width: 100%;
    height: 10rem;
    background: #000;
    color: white;
    border: none;
    border-radius: 7rem;
    font-size: 4rem;
    margin-bottom: 26.3rem;
  }
}


.footer {
  position: relative;
  text-align: center;
  color: white;
  font-size: 3rem;
  margin-bottom: 9rem;
}
</style>
