use crate::css_values::{
    property::{CssValue, LineHeight, PropertyId},
    types::{color::Color, display::*, font::*, length::*},
};

pub fn initial_value(property: &PropertyId) -> CssValue {
    match property {
        PropertyId::Display => CssValue::Display(Display::Inline),
        PropertyId::Position => CssValue::Position(Position::Static),
        PropertyId::Width | PropertyId::Height => {
            CssValue::LengthPercentageAuto(LengthPercentageAuto::Auto)
        }
        PropertyId::MinWidth | PropertyId::MinHeight => {
            CssValue::LengthPercentageAuto(LengthPercentageAuto::Auto)
        }
        PropertyId::MaxWidth | PropertyId::MaxHeight => {
            CssValue::LengthPercentageAuto(LengthPercentageAuto::Auto)
        }
        PropertyId::MarginTop
        | PropertyId::MarginRight
        | PropertyId::MarginBottom
        | PropertyId::MarginLeft => {
            CssValue::LengthPercentageAuto(LengthPercentageAuto::Length(Length::Zero))
        }
        PropertyId::PaddingTop
        | PropertyId::PaddingRight
        | PropertyId::PaddingBottom
        | PropertyId::PaddingLeft => {
            CssValue::LengthPercentage(LengthPercentage::Length(Length::Zero))
        }
        PropertyId::BorderTopWidth
        | PropertyId::BorderRightWidth
        | PropertyId::BorderBottomWidth
        | PropertyId::BorderLeftWidth => CssValue::Length(Length::Px(3.0)),
        PropertyId::BoxSizing => CssValue::BoxSizing(BoxSizing::ContentBox),
        PropertyId::OverflowX | PropertyId::OverflowY => CssValue::Overflow(Overflow::Visible),
        PropertyId::Float => CssValue::Float(Float::None),
        PropertyId::Clear => CssValue::Clear(Clear::None),
        PropertyId::FlexDirection => CssValue::FlexDirection(FlexDirection::Row),
        PropertyId::FlexWrap => CssValue::FlexWrap(FlexWrap::Nowrap),
        PropertyId::FlexGrow => CssValue::Number(0.0),
        PropertyId::FlexShrink => CssValue::Number(1.0),
        PropertyId::FlexBasis => CssValue::LengthPercentageAuto(LengthPercentageAuto::Auto),
        PropertyId::AlignItems => CssValue::Alignment(AlignmentValue::Normal),
        PropertyId::AlignSelf => CssValue::Alignment(AlignmentValue::Normal),
        PropertyId::AlignContent => CssValue::Alignment(AlignmentValue::Normal),
        PropertyId::JustifyContent => CssValue::Alignment(AlignmentValue::Normal),
        PropertyId::JustifyItems => CssValue::Alignment(AlignmentValue::Normal),
        PropertyId::JustifySelf => CssValue::Alignment(AlignmentValue::Normal),
        PropertyId::Gap | PropertyId::RowGap | PropertyId::ColumnGap => {
            CssValue::LengthPercentage(LengthPercentage::Length(Length::Zero))
        }
        PropertyId::FontSize => {
            CssValue::LengthPercentage(LengthPercentage::Length(Length::Px(16.0)))
        }
        PropertyId::FontFamily => {
            CssValue::FontFamily(vec![FontFamily::Generic(GenericFamily::Serif)])
        }
        PropertyId::FontWeight => CssValue::FontWeight(FontWeight::Normal),
        PropertyId::FontStyle => CssValue::FontStyle(FontStyle::Normal),
        PropertyId::LineHeight => CssValue::LineHeight(LineHeight::Normal),
        PropertyId::TextAlign => CssValue::TextAlign(TextAlign::Start),
        PropertyId::WhiteSpace => CssValue::WhiteSpace(WhiteSpace::Normal),
        PropertyId::Color => CssValue::Color(Color::Rgba {
            r: 0,
            g: 0,
            b: 0,
            a: 1.0,
        }),
        PropertyId::BackgroundColor => CssValue::Color(Color::Transparent),
        PropertyId::Visibility => CssValue::Visibility(Visibility::Visible),
        PropertyId::Opacity => CssValue::Number(1.0),
        PropertyId::ZIndex => CssValue::Integer(0),
        PropertyId::ContentVisibility => CssValue::ContentVisibility(ContentVisibility::Visible),
        PropertyId::Transform => CssValue::Transform(vec![]),
        PropertyId::Custom(_) => CssValue::Inherit,
    }
}
