<?php

namespace app\traits\account;

use think\Model;
use app\model\Base;
use think\Collection;
use app\model\AccountAddress;
use think\db\exception\DbException;
use think\db\exception\DataNotFoundException;
use think\db\exception\ModelNotFoundException;

trait AccountAddressTrait
{
    /**
     * 获取地址详情
     *
     * @param  int  $id
     * @param  array  $fields
     * @return array|Model|null
     * @throws DataNotFoundException
     * @throws DbException
     * @throws ModelNotFoundException
     */
    public function findAddressById(int $id, array $fields = [])
    {
        return AccountAddress::findById($id, $fields);
    }

    /**
     * 获取地址列表
     *
     * @param  int  $userId
     * @param  array  $fields
     * @return Collection
     * @throws DataNotFoundException
     * @throws DbException
     * @throws ModelNotFoundException
     */
    public function findAddressByUid(int $userId, array $fields = []): Collection
    {
        return AccountAddress::where('user_id', $userId)->order('id', 'desc')->field($fields)->select();
    }

    /**
     * 保存地址
     *
     * @param  array  $data
     * @return AccountAddress|Base|Model
     */
    public function saveAddress(array $data)
    {
        if ($data['is_default'] == 1) {
            AccountAddress::update(['is_default' => 0], ['user_id' => $data['user_id']]);
        }
        if (isset($data['id']) && !empty($data['id'])) {
            return AccountAddress::updateById($data['id'], $data);
        }
        return AccountAddress::create($data);
    }

    /**
     * 删除地址
     *
     * @param  int  $id
     * @return bool
     */
    public function delAddress(int $id): bool
    {
        return AccountAddress::deleteById($id);
    }
}