''' book and author data '''
from dataclasses import dataclass, field
from typing import List

from .base_activity import ActivityObject, Image

@dataclass(init=False)
class Book(ActivityObject):
    ''' serializes an edition or work, abstract '''
    authors: List[str]
    first_published_date: str
    published_date: str

    title: str
    sort_title: str
    subtitle: str
    description: str
    languages: List[str]
    series: str
    series_number: str
    subjects: List[str]
    subject_places: List[str]

    openlibrary_key: str
    librarything_key: str
    goodreads_key: str

    attachment: List[Image] = field(default=lambda: [])
    type: str = 'Book'


@dataclass(init=False)
class Edition(Book):
    ''' Edition instance of a book object '''
    isbn_10: str
    isbn_13: str
    oclc_number: str
    asin: str
    pages: str
    physical_format: str
    publishers: List[str]

    work: str
    type: str = 'Edition'


@dataclass(init=False)
class Work(Book):
    ''' work instance of a book object '''
    lccn: str
    editions: List[str]
    type: str = 'Work'


@dataclass(init=False)
class Author(ActivityObject):
    ''' author of a book '''
    name: str
    born: str
    died: str
    aliases: str
    bio: str
    openlibrary_key: str
    wikipedia_link: str
    type: str = 'Person'