<?php
declare (strict_types = 1);

namespace app\openapi\controller\v1;

use app\openapi\model\ArticleModel;

class Article
{
    /**
     * 文章列表
     */
    public function list()
    {
        $params = request()->get([
            'category_id',
            'language' => 'zh-cn',
            'page/d'   => 1,
            'size/d'   => 50
        ]);

        if ($params['size'] > 200) {
            // 每页不超过200条
            $params['size'] = 200;
        }

        $articles = ArticleModel::with([
                'category' => fn($query) => $query->field('id, name')
            ])
            ->field([
                'id',
                'language_id',
                'category_id',
                'title',
                'desc',
                'image',
                'deleted_at'
            ])
            ->categoryId($params['category_id']??null)
            ->language($params['language']??'zh-cn')
            ->hidden(['language_id', 'category_id'])
            ->paginate([
                'list_rows' => $params['size'],
                'page'      => $params['page']
            ])
            ->each(function($it) {
                if (!empty($it['image']) && !str_starts_with($it['image'], 'http')) {
                    $it['image'] = image_domain_concat($it['image']);
                }

                return $it;
            });

        return success('success', $articles);
    }

    /**
     * 文章详情
     */
    public function detail()
    {
        $id = request()->param('id');

        $article = ArticleModel::with([
                'category' => fn($query) => $query->field('id, name')
            ])
            ->withoutField([
                'language_id',
                'author',
                'source',
                'seo_title',
                'seo_keywords',
                'seo_desc',
                'created_at',
                'updated_at',
                'deleted_at'
            ])
            ->bypk($id)
            ->hidden(['category_id'])
            ->find();

        if (is_null($article)) {
            return error('the article does not exist');
        }

        // 图片处理
        if (!empty($article['image']) && !str_starts_with($article['image'], 'http')) {
            $article['image'] = image_domain_concat($article['image']);
        }

        // 详情中图片处理
        if (!empty($article['content'])) {
            $article['content'] = html_image_replace($article['content']);
        }

        return success('success', $article);
    }
}
