<?php

namespace App\Http\Controllers\Api;

use App\Http\Requests\UserAddressSave;
use App\Http\Services\UserAddressService;
use App\Models\UserAddressModel;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Http\Request;

class UserAddressApiController extends Controller
{

    public function list(Request $request)
    {
        $userId = $request->user->id;
        $data = UserAddressService::getUserAddressList($userId);
        return $this->setSuccessData($data, count($data));
    }

    public function detail(Request $request)
    {
        $addressId = $request->input('address_id');
        $data = UserAddressService::getUserAddressDetail($addressId);
        return $this->setSuccessData($data);
    }

    public function add(UserAddressSave $request)
    {
        $address = $request->only([
            'email',
            'phone',
            'country',
            'address_type',
            'last_name',
            'first_name',
            'company_name',
            'detail_address',
            'city',
            'province',
            'post_code',
            'is_default'
        ]);
        $user = $request->user;
        $addressId = UserAddressService::addUserAddress($address, $user);
        if (!$addressId) {
            return $this->setError('Add user address failed');
        }

        return $this->setSuccessData($addressId, 0, 0, 'Add user address success');
    }

    public function update(UserAddressSave $request)
    {
        $address = $request->only([
            'address_id',
            'email',
            'phone',
            'country',
            'address_type',
            'last_name',
            'first_name',
            'company_name',
            'detail_address',
            'city',
            'province',
            'post_code',
            'is_default',
        ]);
        $user = $request->user;
        $result = UserAddressService::updateUserAddress($address, $user);
        if (!$result) {
            return $this->setError('Update user address failed');
        }

        return $this->setSuccess('Update user address success');
    }

    public function delete(Request $request)
    {
        $addressId = $request->input('address_id');
        $result = UserAddressModel::where('address_id', $addressId)->delete();
        if (!$result) {
            return $this->setError('Delete user address failed');
        }

        return $this->setSuccess('Delete user address success');
    }

}