<?php

namespace App\Http\Controllers;

use App\CommonFunction;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Mail;

class PasswordReminderController extends Controller
{
    // パスワード再設定メール送信
    public function sendMail(Request $request)
    {
        // 入力チェック内容
        $rules  = [
            'email' => 'required | email',
            'phone.*' => 'required|regex:/^[0-9]+$/',
        ];
        
        // エラーメッセージ
        $message = [
            'email.required' => 'メールアドレスを入力してください',
            'email.email' => 'メールアドレスの形式が正しくありません',
            'phone.*' => '電話番号を正しく入力して下さい',
        ];

        // バリデーションチェック
        $validator = Validator::make($request->all(), $rules, $message);
        if ($validator->fails()) {
            return redirect(route('password_reminder', ['management_code' => request()->route('management_code')]))
                ->withErrors($validator)
                ->withInput();
        }

        // 存在チェック　([本メールアドレス or 予備メールアドレス] and [携帯電話番号 or 自宅電話番号]に一致するデータ)
        $email = $request->input('email');
        $phone = implode('-', $request->input('phone'));
        $existingMember = User::where(function ($query) use ($email) {
            $query->where('user_primemail', $email)->orWhere('user_submail', $email);
        })->where(function ($query) use ($phone) {
            $query->where('user_mobile', $phone)->orWhere('user_homephone', $phone);
        })->first();
        if (!$existingMember) {
            return redirect(route('password_reminder', ['management_code' => request()->route('management_code')]))
                ->withErrors(['nodata' => '該当する会員情報が見つかりませんでした'])
                ->withInput();
        }

        // パスワード変更
        $commonFunction = new CommonFunction();
        $userPass = $commonFunction->createPassword();
        $userPassHash = $commonFunction->hashPassword($existingMember->user_seq, $userPass);
        $existingMember->user_pass = $userPassHash;
        $existingMember->updated_at = now();
        $existingMember->save();

        // 通知メール送信
        Mail::send(["text" => 'emails.password_remind'], [
            'name' => $existingMember->user_name,
            'pass' => $userPass
        ], function ($message) use ($email) {
            $message->to($email)->subject('【So-Manager】パスワード再発行完了');
        });

        // 完了画面遷移
        return view('general.password_reminder_complete');
    }
}